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();
}
} }

Thread--使用condition实现顺序执行的更多相关文章

  1. 使用Condition实现顺序执行

    参考<Java多线程编程核心技术> 使用Condition对象可以对线程执行的业务进行排序规划 具体实现代码 public class Run2 { private static Reen ...

  2. [Thread] 多线程顺序执行

    Join 主线程join 启动线程t1,随后调用join,main线程需要等t1线程执行完毕后继续执行. public class MainJoin { static class MyThread i ...

  3. jmeter Thread Groups的顺序执行与并行执行

    本期目标: 理解Thread Groups的顺序执行与并行执行 控制因子:Run Thread Groups consecutively(i.e.one at time) 预期结论: 1.勾选 Run ...

  4. 使用condition 实现线程顺序执行

    书上给的例子都是ABCABC这种,比较简单,复杂点的如A0B0C0, A0A1A2没有,手动实现下,做个记录 1. A0 A1 A2 A3 public class Demo0 { private s ...

  5. Java中如何保证线程顺序执行

    只要了解过多线程,我们就知道线程开始的顺序跟执行的顺序是不一样的.如果只是创建三个线程然后执行,最后的执行顺序是不可预期的.这是因为在创建完线程之后,线程执行的开始时间取决于CPU何时分配时间片,线程 ...

  6. C#之使用AutoResetEvent实现线程的顺序执行

    前几天一朋友问我如何实现线程的顺序执行,说真的,虽然看过CLR这本书,也把线程部分拜读了两遍,但是这个问题出来之后还是没有一个思路.今天在搜索资料的时候无意中再次看到AutoResetEvent这个东 ...

  7. Java中线程顺序执行

    现有线程threadone.threadtwo和threadthree,想要的运行顺序为threadone->threadtwo->threadthree,应该如何处理?这里需要用到一个简 ...

  8. AsyncTask delay延迟执行 或者顺序执行 问题

    惯用AsyncTask的朋友可能会发现AsyncTask的坑: Android executes AsyncTask tasks before Android 1.6 and again as of ...

  9. Android中让多个线程顺序执行探究

    线程调度是指按照特定机制为多个线程分配CPU的使用权. 有两种调度模型:分时调度模型和抢占式调度模型. 分时调度模型:是指让所有的线程轮流获得cpu的使用权,并且平均分配每个线程占用的CPU的时间片. ...

随机推荐

  1. NO1 ip-systemctl-fdisk

    一.IP相关·man·man:show manual info   查看一个命令的帮助信息:man ip·ip命令: show device显示设备,device address显示地址,route ...

  2. 《ES6标准入门》(阮一峰)--4.字符串的扩展

    1.字符的 Unicode 表示法 ES6 加强了对 Unicode 的支持,允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码点. "\u0061" ...

  3. DStream-04 Window函数的原理和源码

    DStream 中 window 函数有两种,一种是普通 WindowedDStream,另外一种是针对 window聚合 优化的 ReducedWindowedDStream. Demo objec ...

  4. P1052 卖个萌

    P1052 卖个萌 转跳点:

  5. 使用Kickstart+pxe自动化安装部署无人值守的linux服务器

    Kickstart+pxe Kickstart无人职守安装RHEL5过程分享(详细图解版) 启动应用有:httpd.dhcpd.named.xinetd 无人职守自动批量安装linux系统超详细 参考 ...

  6. redis3.2.2 集群

    http://blog.csdn.net/imxiangzi/article/details/52431729 http://www.2cto.com/kf/201701/586689.html me ...

  7. 九十九、SAP中ALV事件之十二,给ALV的标题栏添加图片

    一.在OAER中找一个喜欢的图片,对象标识为“TRVPICTURE04” 二.来到我们的代码区,输入代码 三.效果如下 很完美

  8. WCF基础调用

    WCF学习demo代码下载 调用:启动wcf服务程序,然后建立一个控制台应用程序 建立wcf程序 添加 using System; using System.Collections.Generic; ...

  9. 第一部分 JavaScript语言核心(二)

    第四章 表达式和运算符 P66 运算符优先级,从上到下: p68 属性访问表达式和调用表达式的优先级比运算符优先级都要高,eg: typeof my.functions[x](y) //typeof在 ...

  10. POJ 3071:Football

    Football Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3600   Accepted: 1844 Descript ...