Python 官方文档:入门教程 => 点击学习
目录定义CountDownLatch 示例CyclicBarrier 示例定义 CountDownLatch: A synchronization aid that allows o
CountDownLatch: A synchronization aid that allows one or more threads to wait until a set of operations being perfORMed in other threads completes.
CyclicBarrier: A synchronization aid that allows a set of threads to all wait for each other to reach a common barrier point.
上述是oracle官方定义。简单来说
CountDownLatch:计数器,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。
CyclicBarrier:循环屏障,它允许一组线程相互等待以达到一个共同的屏障点。
区别
创建两组线程,一组等待另一组执行完才继续进行
CountDownLatch countDownLatch = new CountDownLatch(5);
ExecutorService executorService = Executors.newCachedThreadPool();
for (int i = 0; i < 5; i++) {
executorService.execute(() -> {
countDownLatch.countDown();
System.out.println("run..");
});
}
for (int i = 0; i < 3; i++) { //我们要等上面执行完成才继续
executorService.execute(() -> {
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("await..");
});
}
executorService.shutdown();
打印:
run..
run..
run..
run..
run..
await..
await..
await..
等待累加线程执行完,主线程再输出累加结果
public class ThreadUnsafeExample {
private int cnt = 0;
public void add() {
cnt++;
}
public int get() {
return cnt;
}
public static void main(String[] args) throws InterruptedException {
final int threadSize = 1000;
ThreadUnsafeExample example = new ThreadUnsafeExample();
final CountDownLatch countDownLatch = new CountDownLatch(threadSize);
ExecutorService executorService = Executors.newCachedThreadPool();
for (int i = 0; i < threadSize; i++) {
executorService.execute(() -> {
example.add();
countDownLatch.countDown();
});
}
countDownLatch.await();
executorService.shutdown();
System.out.println(example.get());
}
}
打印:
997
3 模拟并发
ExecutorService executorService = Executors.newCachedThreadPool();
CountDownLatch countDownLatch = new CountDownLatch(1);
for (int i = 0; i < 5; i++) {
executorService.submit( () -> {
try {
countDownLatch.await();
System.out.println("【" + Thread.currentThread().getName() + "】开始执行……");
} catch (InterruptedException e) {
e.printStackTrace();
}
});
}
Thread.sleep(2000);
countDownLatch.countDown();//开始并发
executorService.shutdown();
打印:
【pool-2-thread-2】开始执行……
【pool-2-thread-5】开始执行……
【pool-2-thread-3】开始执行……
【pool-2-thread-1】开始执行……
【pool-2-thread-4】开始执行……
所有线程相互等待,直到某一步完成后再继续执行
final int totalThread = 3;
CyclicBarrier cyclicBarrier = new CyclicBarrier(3);
ExecutorService executorService = Executors.newCachedThreadPool();
for (int i = 0; i < totalThread; i++) {
executorService.execute(() -> {
System.out.println("before..");
try {
cyclicBarrier.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
System.out.println("after..");
});
}
executorService.shutdown();
打印:
before..
before..
before..
after..
after..
after..
到此这篇关于Java CountDownLatch计数器与CyclicBarrier循环屏障的文章就介绍到这了,更多相关Java CountDownLatch与CyclicBarrier内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: JavaCountDownLatch计数器与CyclicBarrier循环屏障
本文链接: https://www.lsjlt.com/news/203157.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
一口价域名售卖能注册吗?域名是网站的标识,简短且易于记忆,为在线用户提供了访问我们网站的简单路径。一口价是在域名交易中一种常见的模式,而这种通常是针对已经被注册的域名转售给其他人的一种方式。
一口价域名买卖的过程通常包括以下几个步骤:
1.寻找:买家需要在域名售卖平台上找到心仪的一口价域名。平台通常会为每个可售的域名提供详细的描述,包括价格、年龄、流
443px" 443px) https://www.west.cn/docs/wp-content/uploads/2024/04/SEO图片294.jpg https://www.west.cn/docs/wp-content/uploads/2024/04/SEO图片294-768x413.jpg 域名售卖 域名一口价售卖 游戏音频 赋值/切片 框架优势 评估指南 项目规模
0