Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpThStr 162 of 322 menu
◀ ▶

Запуск потока в Java

Объект Thread после new ещё не выполняет код задачи. Планировщик JVM подключается только после start(): создаётся новый поток ОС, и уже в нём вызывается run().

Если вызвать run() напрямую с главного потока, работа пройдёт как обычный метод без параллелизма. Повторный start() на том же объекте запрещён и даст IllegalThreadStateException.

Минимальный параллельный запуск:

public class Main { public static void main(String[] args) { Thread worker = new Thread(() -> { System.out.println("worker"); }, "worker"); worker.start(); System.out.println("main"); } }

Строки main и worker могут появиться в разном порядке: планировщик не гарантирует, кто успеет первым. На это опираются только явные барьеры вроде join, о которых в следующем уроке.

Сравнение неправильного вызова run() и правильного start():

public class Main { public static void main(String[] args) { Thread t = new Thread(() -> System.out.println("job")); t.run(); System.out.println("after run"); Thread t2 = new Thread(() -> System.out.println("job2")); t2.start(); System.out.println("after start"); } }

После run() сообщение задачи и after run идут строго друг за другом в главном потоке. После start() порядок снова может меняться.

Запустите поток с лямбдой, печатающей "tick". Сразу после старта выведите "tock" из main. Запустите программу несколько раз и зафиксируйте, меняется ли порядок строк.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить