博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java:同步线程,等待
阅读量:6428 次
发布时间:2019-06-23

本文共 1339 字,大约阅读时间需要 4 分钟。

import java.util.concurrent.CountDownLatch;CountDownLatch  c = new CountDownLatch(5); //初始化一个计数值为5的进程c.await();     //进入等待状态,直到计数值为0c.countDown(); //计数值减1,如果计数值为0则释放所有等待的线程

例子:

class Driver {
void main() throws InterruptedException {
CountDownLatch startSignal = new CountDownLatch(1); CountDownLatch doneSignal = new CountDownLatch(N); for (int i = 0; i < N; ++i) // create and start threads new Thread(new Worker(startSignal, doneSignal)).start(); doSomethingElse(); // don't let run yet startSignal.countDown(); // let all threads proceed doSomethingElse(); doneSignal.await(); // wait for all to finish }}class Worker implements Runnable {
private final CountDownLatch startSignal; private final CountDownLatch doneSignal; Worker(CountDownLatch startSignal, CountDownLatch doneSignal) {
this.startSignal = startSignal; this.doneSignal = doneSignal; } public void run() {
try {
startSignal.await(); doWork(); doneSignal.countDown(); } catch (InterruptedException ex) {
} // return; } void doWork() {
... }}

第一个类是一个启动信号,在 driver 为继续执行 worker 做好准备之前,它会阻止所有的 worker 继续执行。

第二个类是一个完成信号,它允许 driver 在完成所有 worker 之前一直等待。

转载于:https://www.cnblogs.com/xuejianbest/p/10285291.html

你可能感兴趣的文章
Eclipse rcp 开发 : 集成aptana
查看>>
Java 数组转换为List
查看>>
图元的属性---OpenGL状态变量
查看>>
pt-query-digest查询日志分析工具
查看>>
那些VisualStudio隐藏的调试功能(转)
查看>>
【原创】Erlang 中 binary_to_term 和 term_to_binary 的使用场景
查看>>
【转载】升级OpenSSL修复高危漏洞Heartbleed
查看>>
Struts秘籍之第1段:配置Struts应用
查看>>
Request
查看>>
知乎上小米变相约瑟夫环面试题微软解法的golang代码
查看>>
PHP IOC容器 - 依赖自动注入/依赖单例注入/依赖契约注入/参数关联传值
查看>>
8.0消息推送
查看>>
Oracle-No.05 Oracle CASE WHEN 用法介绍
查看>>
Java-No.12 Common-pool2实现Socket连接池
查看>>
vim 不自动生成备份文件
查看>>
render _forward _redirect
查看>>
在 Linux 上不活动的用户自动退出
查看>>
怎么组织文档
查看>>
第九节 字符串的比较
查看>>
ubuntu安装使用
查看>>