JAVA多线程CountDownLatch倒计时锁应用
发布时间:2023-05-17 16:22:24
CountDownLatch是Java中的一个多线程同步工具,它可以让一个或多个线程等待其他线程完成任务后再执行。在实际应用中,CountDownLatch常常用于系统启动时的等待,或者某个线程需要等待其他线程完成一项任务后再开始执行。
CountDownLatch的使用非常简单,只需要创建一个CountDownLatch对象并指定需要等待的线程数,对于需要等待的线程,它们在执行完任务后需要调用CountDownLatch的countDown方法以通知主线程继续执行。
下面我们来看一个简单的例子:
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CountDownLatchTest {
public static void main(String[] args) throws InterruptedException {
int count = 10;
CountDownLatch latch = new CountDownLatch(count);
ExecutorService executor = Executors.newFixedThreadPool(count);
for (int i = 0; i < count; i++) {
final int j = i + 1;
executor.execute(() -> {
try {
System.out.println("Thread " + j + " is working");
Thread.sleep(1000);
System.out.println("Thread " + j + " has done its work");
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
latch.countDown();
}
});
}
latch.await();
System.out.println("All threads have finished their work");
executor.shutdown();
}
}
在这个例子中,我们创建了10个线程,并让它们执行一个1秒钟的任务。主线程在启动这10个线程后等待它们执行完毕,然后输出"All threads have finished their work"。
CountDownLatch的使用有很多应用场景,比如说在一个复杂的系统中,启动需要一些时间,我们可以用CountDownLatch让主线程等待所有线程完成启动后再继续执行;或者在一些多个线程协作完成某项任务的情况下,我们可以用CountDownLatch让其中一个线程等待其他线程完成任务后再继续执行。
总之,CountDownLatch是一个非常实用的多线程工具,它可以让多线程协作更加方便和高效。
