countDownLatch
作用:用于控制多线程执行协调,即线程先后依赖的问题。如主线程需要等待多个子线程执行完成后继续执行。
示例代码(代码中关键点注释)
public class CountDownTest {
public static void main(String[] args) {
long start = System.currentTimeMillis();
System.out.println("start = " + start);
int num = 100;
LinkedBlockingQueue lbq = new LinkedBlockingQueue();
lbq.stream().count();
final CountDownLatch cdl = new CountDownLatch(num);
//参数为线程个数
for (int i = 0;
i < num;
i++) {
new Thread(() -> {
System.out.println("thread:"+num);
cdl.countDown();
//此方法是CountDownLatch的线程数-1
}).start();
}
try {
cdl.await();
}catch (InterruptedException e){
e.printStackTrace();
}
// 通过await()调用,保证以下输出是最末尾输出
long end = System.currentTimeMillis();
System.out.println("end = " + end);
System.out.println("use" + (end - start));
}
}
CyclicBarrier 作用:控制多个线程统一时间执行 示例代码(代码中关键点注释)
public class CyclicBarrierTest {
public static void main(String[] args) {
int num = 5;
CyclicBarrier cyclicBarrier = new CyclicBarrier(num);
for(int i = 0;
i {
try {
Thread.sleep(num*1000);
System.out.println(new Date().getTime());
//以下调用将会使改线程参与到栅栏控制中,等待所有栅栏内线程全部初始化完成一同执行
//预期结果为多个线程输出的时间戳完全一致
cyclicBarrier.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
}).start();
}
}
}
Semaphore 作用:控制多个线程同时执行的个数。类似工人和操作台,工人数量大于操作台 【多线程控制 countDownLatch、CyclicBarrier、Semaphore 总结】示例代码(代码中关键点注释)
public class SemaphoreTest {
public static void main(String[] args) {
int num = 3;
//可执行线程数(操作台)
int numThread = 20;
//能参与的线程数 (工人)
Semaphore semaphore = new Semaphore(num);
for(int i = 0;
i{
try {
semaphore.acquire();
//工人上工,占用一个操作台
System.out.println("工号:"+ no +"的工人在干活");
Thread.sleep(5000);
System.out.println("工号:"+ no +"的工人下班了");
semaphore.release();
//工人下班,释放操作台
}catch (Exception e){
e.printStackTrace();
}
}).start();
}
}
}
推荐阅读
- 编程语言|TypeScript的另一面(类型编程)
- 笔记|栈和队列常见oj题
- Java中取余(%)运算规则
- 编程语言|我的阿里巴巴盒马上岸总结
- java|程序员2009精华本(china-pub首发)--百期后的新起点
- java|六面天猫,已拿 offer,我的面经复盘总结,大厂真的有那么难进吗()
- 程序人生|开年无情被裁,还好我未雨绸缪,3天拿下新offer,薪资可观
- php|php学习笔记——PHP 概述
- python|分享一个开源免费、功能强大的视频播放器库