Condition实现多线程顺序打印:

  

 import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock; public class Run { volatile public static int nextPrintWho = 1;
private static ReentrantLock lock = new ReentrantLock();
final private static Condition conditionA = lock.newCondition();
final private static Condition conditionB = lock.newCondition();
final private static 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) {
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) {
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) {
e.printStackTrace();
}finally {
lock.unlock();
}
};
};
Thread[] aArray = new Thread[5];
Thread[] bArray = new Thread[5];
Thread[] cArray = new Thread[5];
for (int i = 0; i < 5; i++) {
aArray[i] = new Thread(threadA);
bArray[i] = new Thread(threadB);
cArray[i] = new Thread(threadC);
aArray[i].start();
bArray[i].start();
cArray[i].start();
}
}
}

运行结果如下:

  

最新文章

  1. 2000条你应知的WPF小姿势 基础篇&lt;8-14&gt;
  2. java集合你了解多少?
  3. 15 个 Android 通用流行框架大全(转)
  4. Adobe After Effects工程使用aep格式来存储
  5. [原创]从Oracle和Microsoft Sql Server迁移到PostgreSQL Plus Advanced Server
  6. javascript_22_for_js控制div每五个换一行
  7. 简化 Django
  8. build path contains duplicate entry:&#39;src&#39; for project &#39;XXX&#39;
  9. 2015浙江财经大学ACM有奖周赛(一) 题解报告
  10. Python二分法查找及变种分析
  11. 【CF235C】Cyclical Quest(后缀自动机)
  12. 题解 P4692 【[Ynoi2016]谁的梦】
  13. Oracle管理文件OMF (oracle managed files)
  14. Nginx详解二十:Nginx深度学习篇之HTTPS的原理和作用、配置及优化
  15. MyEclipse 2017 CI 10 发布(附下载)
  16. js实现UTC时间转为北京时间,时间戳转为时间
  17. Keepalived配置与使用--转载
  18. jQuery on() 方法问题
  19. 分布式文档存储数据库(MongoDB)副本集配置
  20. 知问前端——工具提示UI

热门文章

  1. 51nod 1732 LCS变形
  2. Eclipse Dynamic Web Module 3.0 requires Java 1.6 or newer &amp;&amp; Filter mapping specifies an unknown filter name characterEncodingFilter
  3. skynet源码阅读&lt;5&gt;--协程调度模型
  4. python主函数
  5. visual assist(VA)设置快捷键(其它安装的插件设置快捷键也在这里)
  6. Reinforcement Learning Q-learning 算法学习-1
  7. NOI模拟赛 #4
  8. COGS1516. 棋盘上的车
  9. 使用.NET中的XML注释(二) -- 创建帮助文档入门篇
  10. vue.js初学(一) vue的入门编程