CountDownLatch
- CountDownLatch初始化时会给定一个计数,然后每次调用countDown()计数减1,当计数未达到0之前调用await()方法会阻塞直到计数减到0;
- 使用场景:多用于划分任务由多个线程执行,例如:最近写个豆瓣爬虫,需要爬取每个电影的前五页短评,可以划分成5个线程来处理线程。通过latch.await()保证全部完成再返回。
一、CountDownLatch使用样例:
public void latch() throws InterruptedException{
int count = 5;
CountDownLatch latch = new CountDownLatch(count);
for(int x = 0;x < count;x++){
new Worker(x*20,latch).start();
}
latch.await();
System.out.println("全部执行完毕");
}
class Worker extends Thread{
Integer start;
CountDownLatch latch;
public Worker(Integer start,CountDownLatch latch){
this.start = start;
this.latch = latch;
}
@Override
public void run(){
System.out.println(start+"执行");
latch.countDown();
}
}
/*
20 已执行
0 已执行
40 已执行
60 已执行
80 已执行
全部执行完毕
*/
更多java基础总结(适合于java基础学习、java面试常规题):
总结篇(9)---字符串及基本类 (1)字符串及基本类之基本数据类型
总结篇(10)---字符串及基本类 (2)字符串及基本类之java中公共方法及操作
总结篇(12)---字符串及基本类 (4)Integer对象
总结篇(14)---JVM(java虚拟机) (1)JVM虚拟机概括
总结篇(15)---JVM(java虚拟机) (2)类加载器
总结篇(16)---JVM(java虚拟机) (3)运行时数据区
总结篇(17)---JVM(java虚拟机) (4)垃圾回收
总结篇(18)---JVM(java虚拟机) (5)垃圾回收算法
总结篇(19)---JVM(java虚拟机) (6)JVM调优
总结篇(24)---Java线程及其相关(2)多线程及其问题
总结篇(25)---Java线程及其相关(3)线程池及其问题
总结篇(26)---Java线程及其相关(4)ThreadLocal
总结篇(27)---Java并发及锁(1)Synchronized
总结篇(31)---JUC工具类(1)CountDownLatch
本文介绍了Java并发工具类CountDownLatch的使用,通过一个爬虫程序实例展示了如何利用它来同步多个线程执行任务。CountDownLatch初始化后,线程调用countDown()减少计数,直到计数为0,await()方法才会释放阻塞。文章还列举了多个Java基础和并发编程的总结篇章链接。
368

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



