package condition;

 import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock; import threadLocalTest2.ThreadA; public class Run { private static volatile int nextPrintWho = 1;
private static ReentrantLock lock = new ReentrantLock();
private static final Condition conditionA = lock.newCondition();
private static final Condition conditionB = lock.newCondition();
private static final Condition conditionC = lock.newCondition(); public static void main(String[] args) {
Thread threadA = new Thread() { @Override
public void run() {
try {
lock.lock();
while(nextPrintWho != 1) {
conditionA.await();
}
for(int i=0; i<3; i++) {
System.out.println("ThreadA " + (i+1));
}
nextPrintWho = 2;
conditionB.signalAll();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
lock.unlock();
}
} };
Thread threadB = new Thread() { @Override
public void run() {
try {
lock.lock();
while(nextPrintWho != 2) {
conditionB.await();
}
for(int i=0; i<3; i++) {
System.out.println("ThreadB " + (i+1));
}
nextPrintWho = 3;
conditionC.signalAll();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
lock.unlock();
}
} };
Thread threadC = new Thread() { @Override
public void run() {
try {
lock.lock();
while(nextPrintWho != 3) {
conditionC.await();
}
for(int i=0; i<3; i++) {
System.out.println("ThreadC " + (i+1));
}
nextPrintWho = 1;
conditionA.signalAll();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
lock.unlock();
}
} };
for(int i=0; i<5; i++) {
new Thread(threadA).start();
new Thread(threadB).start();
new Thread(threadC).start();
}
} }

最新文章

  1. Java 日志性能优化
  2. js中object类型模拟java中的map
  3. Qt Style Sheets制作UI特效
  4. 两个简单方法加速DataGridView
  5. Asp.Net Mvc: 浅析TempData机制(转发 作者: Tristan G )
  6. ApiDemos--&amp;gt;Views-lists-slow adapter学习
  7. innodb_flush_method参数解析
  8. 非GUI-Qt程序运行后显示Console(简单好用)
  9. 浅谈web网站架构演变过程(转)
  10. shell之路【第四篇】输入输出重定向
  11. 分布式存储 CentOS6.5虚拟机环境搭建FastDFS-5.0.5集群(转载)
  12. js 中采用词法作用域
  13. html标记语言 --表单
  14. Xcode中的调试工具栏简介
  15. JavaScript中的各种X,Y,Width,Height
  16. python接口自动化测试(六)-unittest-单个用例管理
  17. (转)10大H5前端框架
  18. sonarqube6.7安装
  19. DeviceIOControl与驱动层 - 缓冲区模式
  20. 关于PermGen space内存溢出错误解决方法

热门文章

  1. 动态弹出框,iframe的name包含一串随机数
  2. Python基础week1
  3. 【剑指Offer】面试题32 - II. 从上到下打印二叉树 II
  4. 剑指offer自学系列(四)
  5. 040-PHP使用闭包函数来进行父实例的变量自增,正确示例
  6. 036-PHP闭包函数的域限制,与如何向闭包函数传递变量
  7. 163-PHP 文本替换函数str_replace(四)
  8. skLearn 支持向量机
  9. Docker 网络详解及 pipework 源码解读与实践
  10. 如何生成 SSH keys, 并在 Github 或 Gitlab 等上添加密钥