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