CountDown 倒数 , Latch 门闩。顾名思义是倒数门闩,321倒数完毕门闩打开。
CountDownLatch主要有三个方法:
- countDown() 执行倒数
- await() 阻塞等待,相当于门闩,countDown到0时门闩打开。
- await(2, TimeUnit.SECONDS) 可设置最长等待时间,超时后若还没countDown到0,门闩自动打开
public class T02_CountDownLatch {
public static void main(String[] args) {
Thread[] threads = new Thread[10];
CountDownLatch latch = new CountDownLatch(threads.length);
for (int i = 0; i < threads.length; i++) {
threads[i] = new Thread(() -> {
try {
TimeUnit.SECONDS.sleep(5);
System.out.println(Thread.currentThread().getName() + " end");
} catch (InterruptedException e) {
e.printStackTrace();
}
latch.countDown();
});
}
for (int i = 0; i < threads.length; i++) {
threads[i].start();
}
try {
latch.await();
// 可设置最长等待时间
// 超时后若还没countDown到0,门闩自动打开
// latch.await(2, TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("end latch");
}
}
join也可以实现类似功能为什么用CountDownLatch?
用join不好控制,必须要等join线程结束才能继续执行当前线程。而用CountDownLatch门闩时可以自由控制门闩什么时候打开,更加灵活方便。
网友评论