public void testCountDownLatch() {
ThreadFactory factory = new ThreadFactory() {
int i = 1;
@Override
public Thread newThread(Runnable r) {
return new Thread(r, "线程" + i++);
}
};
int size = 10;
final CountDownLatch latch = new CountDownLatch(size);
ExecutorService executor = Executors.newCachedThreadPool(factory);
for (int i = 0; i < size; i++) {
executor.submit(
new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "等待执行");
try {
int time = new Random().nextInt(5);
TimeUnit.SECONDS.sleep(time);
} catch (InterruptedException e) {
e.printStackTrace();
}
latch.countDown();
System.out.println(Thread.currentThread().getName() + "执行完毕");
}
}
);
}
executor.shutdown();
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("所有线程执行完毕");
}
本文通过一个具体示例展示了如何使用 Java 的 CountDownLatch 类来同步多个线程。该示例创建了一个包含 10 个线程的线程池,并使用 CountDownLatch 控制所有线程执行完毕后的后续操作。
1462

被折叠的 条评论
为什么被折叠?



