CountDownLatch
是 Java 并发编程中的一个同步工具类,它允许一个或多个线程等待直到一组操作完成
CountDownLatch
实例时,需要指定一个初始计数。这个计数表示需要等待的操作数量。例如,如果需要等待 5 个线程完成任务,那么计数器的初始值应为 5。int count = 5;
CountDownLatch latch = new CountDownLatch(count);
await()
方法等待:在线程中,可以使用 await()
方法来阻塞当前线程,直到计数器减至 0。调用 await()
方法时,当前线程会释放锁资源,让其他线程继续执行。当计数器减至 0 时,当前线程会被唤醒并继续执行。latch.await();
countDown()
方法减少计数器:当某个操作完成时,需要调用 countDown()
方法来减少计数器。这个方法应由完成操作的线程调用。每次调用 countDown()
方法,计数器都会减 1。当计数器减至 0 时,所有等待的线程都会被唤醒。latch.countDown();
CountDownLatch
是线程安全的,但在多线程环境下,需要确保正确使用同步机制,避免出现竞态条件。CountDownLatch
一旦计数器减至 0,就不能再重置。如果需要重新使用 CountDownLatch
,需要创建一个新的实例。CountDownLatch
不支持超时机制。如果需要等待一段时间,可以考虑使用 Semaphore
或 Future
等其他同步工具类。CyclicBarrier
或 Phaser
等更高级的同步工具类,它们提供了更多的功能和灵活性。