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

Несколько потоков в Java

Одна программа редко ограничивается одним фоновым потоком. Часто создают несколько worker, каждый со своей задачей, а главный поток координирует старт и сбор результатов.

Объекты Thread хранят в массиве или списке, запускают циклом, затем вторым циклом вызывают join для каждого. Так проще не забыть дождаться всех участников.

Три потока с разными именами и общим шаблоном работы:

public class Main { public static void main(String[] args) throws InterruptedException { Thread[] workers = new Thread[3]; for (int i = 0; i < workers.length; i++) { int num = i + 1; workers[i] = new Thread(() -> { System.out.println("worker " + num); }, "w-" + num); } for (Thread t : workers) { t.start(); } for (Thread t : workers) { t.join(); } System.out.println("all finished"); } }

Переменная num копируется в финальную для лямбды, иначе цикл подставит последнее значение i во все задачи. Порядок строк worker 1, worker 2, worker 3 в консоли может отличаться от порядка старта, но all finished появится только после всех join.

Подсчёт суммы в главном потоке после ожидания (каждый worker пишет в общий массив по индексу):

public class Main { public static void main(String[] args) throws InterruptedException { int[] slots = new int[3]; Thread[] workers = new Thread[3]; for (int i = 0; i < 3; i++) { int index = i; workers[i] = new Thread(() -> { slots[index] = (index + 1) * 10; }); } for (Thread t : workers) { t.start(); } for (Thread t : workers) { t.join(); } int sum = 0; for (int value : slots) { sum += value; } System.out.println(sum); } }

Здесь каждый поток пишет в свой элемент массива, поэтому конфликта нет. Запись в один общий счётчик без синхронизации дала бы гонку, её разберут в других разделах.

Создайте 4 потока, каждый выводит своё число от 1 до 4. Запустите все, затем join для каждого и выведите "batch ok".

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