Thread--使用condition实现顺序执行
- 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实现顺序执行的更多相关文章
- 使用Condition实现顺序执行
参考<Java多线程编程核心技术> 使用Condition对象可以对线程执行的业务进行排序规划 具体实现代码 public class Run2 { private static Reen ...
- [Thread] 多线程顺序执行
Join 主线程join 启动线程t1,随后调用join,main线程需要等t1线程执行完毕后继续执行. public class MainJoin { static class MyThread i ...
- jmeter Thread Groups的顺序执行与并行执行
本期目标: 理解Thread Groups的顺序执行与并行执行 控制因子:Run Thread Groups consecutively(i.e.one at time) 预期结论: 1.勾选 Run ...
- 使用condition 实现线程顺序执行
书上给的例子都是ABCABC这种,比较简单,复杂点的如A0B0C0, A0A1A2没有,手动实现下,做个记录 1. A0 A1 A2 A3 public class Demo0 { private s ...
- Java中如何保证线程顺序执行
只要了解过多线程,我们就知道线程开始的顺序跟执行的顺序是不一样的.如果只是创建三个线程然后执行,最后的执行顺序是不可预期的.这是因为在创建完线程之后,线程执行的开始时间取决于CPU何时分配时间片,线程 ...
- C#之使用AutoResetEvent实现线程的顺序执行
前几天一朋友问我如何实现线程的顺序执行,说真的,虽然看过CLR这本书,也把线程部分拜读了两遍,但是这个问题出来之后还是没有一个思路.今天在搜索资料的时候无意中再次看到AutoResetEvent这个东 ...
- Java中线程顺序执行
现有线程threadone.threadtwo和threadthree,想要的运行顺序为threadone->threadtwo->threadthree,应该如何处理?这里需要用到一个简 ...
- AsyncTask delay延迟执行 或者顺序执行 问题
惯用AsyncTask的朋友可能会发现AsyncTask的坑: Android executes AsyncTask tasks before Android 1.6 and again as of ...
- Android中让多个线程顺序执行探究
线程调度是指按照特定机制为多个线程分配CPU的使用权. 有两种调度模型:分时调度模型和抢占式调度模型. 分时调度模型:是指让所有的线程轮流获得cpu的使用权,并且平均分配每个线程占用的CPU的时间片. ...
随机推荐
- Golang的循环结构-for语句
Golang的循环结构-for语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.for循环语法 循环结构在生活中的场景也非常的多,比如: ()上班族们每天朝九晚五的生活; ( ...
- Python3中的bytes和str类型
Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和b ...
- bzoj 2796: [Poi2012]Fibonacci Representation
结论貌似是,,,肯定只有没有重复的数字.http://hzwer.com/6426.html 一开始猜的是贪心,感觉也是可以的啊...(想想都有道理,然而看到是神奇的(dp类)记忆化搜索,直接虚的不敢 ...
- Gauss列主消元
问题:1.列主消元为什么精度高? 2.fabs函数精确度 #include<iostream> #include<cstdio> #include<cstring> ...
- Codeforces Round #616 (Div. 2) 题解
A. Even But Not Even 题意: 定义一个数所有位置的和为偶数它本身不为偶数的数为ebne,现在给你一个数字字符串,你可以删除任意位置上的数字使其变为ebne输出任意改变后的结果,如果 ...
- 六十七、SAP中内表插入的三种方法之一,APPEND的使用
一.如果内表是一个普通的内表,只用于存储数据不用来排序,那么优先选择APPEND插入 二.我们运行程序,并把工作区和内表加入到断点变量,如图所示,1X22的意思如图 三.我们点击ITAB1,来看内表数 ...
- ES6 之 对象属性的可枚举性和遍历
1.Object.getOwnPropertyDescriptor() 解释:获取对对象属性的描述对象. let obj = { foo: 123 }; console.log(Object.getO ...
- 吴裕雄--天生自然C++语言学习笔记:C++ 字符串
C++ 提供了以下两种类型的字符串表示形式: C 风格字符串 C++ 引入的 string 类类型 C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持.字符串实际上是使用 null 字符 ...
- SpringBoot的Banner横幅
SpringBoot的Banner横幅即在SpringBoot应用程序启动过程中,日志输出的如下内容: 如果想替换此部分内容的话,可以在classpath根路径下建立一个文件,命名为:banner.t ...
- H5 - 本地数据存储 - localStorage.setItem