Condition实现多线程顺序打印
2024-08-29 09:40:56
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();
}
}
}
运行结果如下:
最新文章
- 2000条你应知的WPF小姿势 基础篇<;8-14>;
- java集合你了解多少?
- 15 个 Android 通用流行框架大全(转)
- Adobe After Effects工程使用aep格式来存储
- [原创]从Oracle和Microsoft Sql Server迁移到PostgreSQL Plus Advanced Server
- javascript_22_for_js控制div每五个换一行
- 简化 Django
- build path contains duplicate entry:&#39;src&#39; for project &#39;XXX&#39;
- 2015浙江财经大学ACM有奖周赛(一) 题解报告
- Python二分法查找及变种分析
- 【CF235C】Cyclical Quest(后缀自动机)
- 题解 P4692 【[Ynoi2016]谁的梦】
- Oracle管理文件OMF (oracle managed files)
- Nginx详解二十:Nginx深度学习篇之HTTPS的原理和作用、配置及优化
- MyEclipse 2017 CI 10 发布(附下载)
- js实现UTC时间转为北京时间,时间戳转为时间
- Keepalived配置与使用--转载
- jQuery on() 方法问题
- 分布式文档存储数据库(MongoDB)副本集配置
- 知问前端——工具提示UI
热门文章
- 51nod 1732 LCS变形
- Eclipse Dynamic Web Module 3.0 requires Java 1.6 or newer &;&; Filter mapping specifies an unknown filter name characterEncodingFilter
- skynet源码阅读<;5>;--协程调度模型
- python主函数
- visual assist(VA)设置快捷键(其它安装的插件设置快捷键也在这里)
- Reinforcement Learning Q-learning 算法学习-1
- NOI模拟赛 #4
- COGS1516. 棋盘上的车
- 使用.NET中的XML注释(二) -- 创建帮助文档入门篇
- vue.js初学(一) vue的入门编程