Ответ
Да, многопоточная программа выполняется в рамках одного процесса. Потоки (threads) разделяют общие ресурсы процесса (память, открытые файлы), но имеют собственные стеки вызовов и программные счётчики.
Как создать поток в Java:
- Наследование от
Thread:class MyThread extends Thread { @Override public void run() { System.out.println("Поток работает: " + getName()); } } // Запуск new MyThread().start(); - Реализация
Runnable(предпочтительнее):class MyTask implements Runnable { @Override public void run() { System.out.println("Задача выполняется"); } } // Запуск new Thread(new MyTask()).start(); // Или с лямбдой new Thread(() -> System.out.println("Лямбда-поток")).start();
Важные аспекты:
- Конкурентный доступ: Потоки могут одновременно обращаться к общим данным, что требует синхронизации.
- Механизмы синхронизации:
- Ключевое слово
synchronized(для методов или блоков). - Классы из пакета
java.util.concurrent.locks(ReentrantLock). - Атомарные классы (
AtomicInteger).
- Ключевое слово
- Планирование: Порядок и время выполнения потоков управляются планировщиком ОС и JVM, что делает его недетерминированным.