Java | Фишки и трюки
7.21K subscribers
182 photos
29 videos
6 files
40 links
Java: примеры кода, интересные фишки и полезные трюки

Купить рекламу: https://telega.in/c/java_tips_and_tricks

✍️По всем вопросам: @Pascal4eg
Download Telegram
⌨️ Пример реализации CountDownLatch

CountDownLatch позволяет одному или нескольким потокам ждать, когда другие потоки завершат свою работу. Это полезно, когда вы хотите запустить определенные действия только после выполнения нескольких предварительных задач.

Пример кода:

import java.util.concurrent.CountDownLatch;

public class CountDownLatchExample {

public static void main(String[] args) throws InterruptedException {
// Создаем CountDownLatch для трех потоков
CountDownLatch latch = new CountDownLatch(3);

// Запускаем три потокa
for (int i = 0; i < 3; i++) {
new Thread(new Task(latch)).start();
}

// Основной поток ждет, пока все потоки завершатся
latch.await();
System.out.println("Все задачи завершены, продолжение работы основного потока.");
}
}

class Task implements Runnable {
private final CountDownLatch latch;

public Task(CountDownLatch latch) {
this.latch = latch;
}

@Override
public void run() {
try {
// Симуляция работы
Thread.sleep((long) (Math.random() * 1000));
System.out.println("Задача завершена: " + Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
// Уменьшаем счетчик
latch.countDown();
}
}
}


Описание кода:

1. Создание CountDownLatch: Мы создаем объект CountDownLatch с начальным значением 3, что означает, что основной поток будет ожидать завершения трех потоков.

2. Запуск потоков: В цикле запускаем три потока, каждый из которых выполняет задачу.

3. Ожидание завершения: В основном потоке вызываем latch.await(), который блокирует его выполнение до тех пор, пока счетчик не достигает нуля.

4. Задача: Каждый поток выполняет свою задачу (симуляция работы) и вызывает latch.countDown() в блоке finally, уменьшая счетчик.

Когда все три потока завершатся, основной поток продолжит выполнение и выведет сообщение.

#java #CountDownLatch
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍2