CountDownLatch 闭锁的一个简单应用
2018-02-05 17:40
211 查看
闭锁:它是一种同步工具类,可以延缓线程的进度,直到其到达终止状态,CountDownLatch 是闭锁的一种实现。
它的常用的两个方法:await 和 countdown
假设初始化 CountdownLatch c=new CountDownLatch(2); 当前线程执行到c.await()时候会阻塞,直到其他线程执行2次c.countdown(),当前线程才解除阻塞。
下面是一个应用:
package cn.concurrent.t10;
import java.util.concurrent.CountDownLatch;
public class CountDownLatcher {
public static void main(String[] args) {
final CountDownLatch step = new CountDownLatch(3);
new Thread(new Runnable() {
public void run() {
try {
Thread.currentThread().sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("in onece ready");
step.countDown();
}
}).start();
new Thread(new Runnable() {
public void run() {
try {
Thread.currentThread().sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(" in twoce ready");
step.countDown();
}
}).start();
new Thread(new Runnable() {
public void run() {
try {
Thread.currentThread().sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(" in threece ready");
step.countDown();
}
}).start();
try {
step.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("in main ready");
}
}main线程,要等待三个线程都调用了countDown才会执行。
它的常用的两个方法:await 和 countdown
假设初始化 CountdownLatch c=new CountDownLatch(2); 当前线程执行到c.await()时候会阻塞,直到其他线程执行2次c.countdown(),当前线程才解除阻塞。
下面是一个应用:
package cn.concurrent.t10;
import java.util.concurrent.CountDownLatch;
public class CountDownLatcher {
public static void main(String[] args) {
final CountDownLatch step = new CountDownLatch(3);
new Thread(new Runnable() {
public void run() {
try {
Thread.currentThread().sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("in onece ready");
step.countDown();
}
}).start();
new Thread(new Runnable() {
public void run() {
try {
Thread.currentThread().sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(" in twoce ready");
step.countDown();
}
}).start();
new Thread(new Runnable() {
public void run() {
try {
Thread.currentThread().sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(" in threece ready");
step.countDown();
}
}).start();
try {
step.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("in main ready");
}
}main线程,要等待三个线程都调用了countDown才会执行。
相关文章推荐
- 一个简单的SharePoint表单库 + InfoPath应用
- 一个简单WEBSERVICE应用的开发、部署、及各部分意义
- 贝叶斯分类器的一个简单应用(matlab)
- Windows 8.1 应用再出发 (WinJS) - 创建一个简单项目
- C#TCPClient应用-一个简单的消息发送和接收
- 老调重弹:插件式框架开发的一个简单应用
- simple-spa 一个简单的单页应用实例
- leetcode 199. Binary Tree Right Side View 一个简单的BST的BFS应用
- List存储对象的简单应用,List返回一个Object对象,要强转为子类对象。
- iOS开发UI篇—使用picker View控件完成一个简单的选餐应用
- 【Eclipse】一个简单的 RCP 应用 —— 显示Eclipse 的启动时间。
- Notification的一个简单应用代码示例
- 使用nRF51822/nRF51422创建一个简单的BLE应用 ---入门实例手册(中文)之四
- leetcode 50. Pow(x, n) 一个简单的分治算法的应用
- Hello,Cardboard!!-如何开发一个最简单的Cardboard虚拟现实应用(一)
- 应用ASP技术编写一个简单论坛(下)
- 为一个 iOS 应用编写一个简单的 Node.js/MongoDB Web 服务
- 使用nRF51822/nRF51422创建一个简单的BLE应用 ---入门实例手册(中文)之二
- c++ 一个简单的map,struct小应用
- 使用python创建一个简单的restful风格的webservice应用