1 package com.java.concurrent;
  2
  3 import java.util.concurrent.locks.Condition;
  4 import java.util.concurrent.locks.Lock;
  5 import java.util.concurrent.locks.ReentrantLock;
  6
  7 /**
  8  * 使用多线程的方式进行轮循打印ABCABC
  9  * @author fliay
 10  *
 11  */
 12 public class TestABCAlternate {
 13
 14     public static void main(String[] args) {
 15         final AlternateDemo ad = new AlternateDemo();
 16         new Thread(new Runnable() {
 17
 18             public void run() {
 19                 for(int i = 1;i<10;i++){
 20                     try {
 21                         ad.loopA(i);
 22                     } catch (InterruptedException e) {
 23                         // TODO Auto-generated catch block
 24                         e.printStackTrace();
 25                     }
 26                 }
 27             }
 28         },"线程1").start();
 29
 30     new Thread(new Runnable() {
 31
 32             public void run() {
 33                 for(int i = 1;i<10;i++){
 34                     try {
 35                         ad.loopB(i);
 36                     } catch (InterruptedException e) {
 37                         // TODO Auto-generated catch block
 38                         e.printStackTrace();
 39                     }
 40                 }
 41             }
 42         },"线程2").start();
 43
 44
 45     new Thread(new Runnable() {
 46
 47         public void run() {
 48             for(int i = 1;i<10;i++){
 49                 try {
 50                     ad.loopC(i);
 51                 } catch (InterruptedException e) {
 52                     // TODO Auto-generated catch block
 53                     e.printStackTrace();
 54                 }
 55             }
 56         }
 57     },"线程3").start();
 58
 59
 60
 61     }
 62
 63
 64
 65 }
 66
 67
 68 class AlternateDemo{
 69
 70     private int number=1;//当前正在执行的线程标记
 71
 72     private Lock lock = new ReentrantLock();
 73
 74     private Condition condition1 = lock.newCondition();
 75     private Condition condition2 = lock.newCondition();
 76     private Condition condition3 = lock.newCondition();
 77
 78     public void loopA(int totalLoop) throws InterruptedException{
 79         lock.lock();
 80         try{
 81             //1.判断
 82             if(number!=1){
 83                 condition1.await();
 84             }
 85             //2.打印
 86             System.out.println(Thread.currentThread().getName()+":A"+"-"+totalLoop);
 87
 88             //3.唤醒
 89             number=2;
 90             condition2.signal();
 91         }finally{
 92             lock.unlock();
 93         }
 94     }
 95
 96     public void loopB(int totalLoop) throws InterruptedException{
 97         lock.lock();
 98         try{
 99             //1.判断
100             if(number!=2){
101                 condition2.await();
102             }
103             //2.打印
104             System.out.println(Thread.currentThread().getName()+":B"+"-"+totalLoop);
105
106             //3.唤醒
107             number=3;
108             condition3.signal();
109         }finally{
110             lock.unlock();
111         }
112     }
113
114
115     public void loopC(int totalLoop) throws InterruptedException{
116         lock.lock();
117         try{
118             //1.判断
119             if(number!=3){
120                 condition3.await();
121             }
122             //2.打印
123             System.out.println(Thread.currentThread().getName()+":C"+"-"+totalLoop);
124
125             //3.唤醒
126             number=1;
127             condition1.signal();
128         }finally{
129             lock.unlock();
130         }
131     }
132
133
134
135
136
137
138
139
140
141
142
143
144 }

转载于:https://www.cnblogs.com/fliay/p/7680746.html

线程轮循打印ABC...相关推荐

  1. 让3个线程打印ABC

    让3个线程依次打印ABC,是一个常见的(面试)问题,这是阿里和华为都有考过的面试题.比如题目描述如下: 编写一个程序,开启三个线程,这三个线程按照顺序依次打印ABC,每个字母打印10次后结束,最后结果 ...

  2. 三个线程交替打印ABC(Condition实现精确通知)

    三个线程交替打印ABC: package pc;import java.util.concurrent.locks.Condition; import java.util.concurrent.loc ...

  3. python两个线程交替打印_三线程按顺序交替打印ABC的四种方法

    建立三个线程A.B.C,A线程打印10次字母A,B线程打印10次字母B,C线程打印10次字母C,但是要求三个线程同时运行,并且实现交替打印,即按照ABCABCABC的顺序打印. 二.Synchroni ...

  4. 多线程面试题之【三线程按顺序交替打印ABC的方法】

    建立三个线程,线程名字分别为:A.B.C,要求三个线程分别打印自己的线程名字,但是要求三个线程同时运行,并且实现交替打印,即按照ABCABCABC的顺序打印.打印10轮,打印完毕控制台输出字符串:&q ...

  5. 三个线程轮流执行顺序打印ABC

    方法1:使用boolean标记 package com.ziyear.exam;/*** 3个线程,顺序打印ABC10次*/ public class PrintThread_ABC_10_1 {/* ...

  6. JavaScript学习笔记(五)---cookie、Proxy、服务器、PHP语言、http协议、同步异步、事件轮循机制、ajax编写、接口

    JavaScript学习笔记(五)---cookie.Proxy.服务器.PHP语言.http协议.同步异步.事件轮循机制.ajax编写.接口 1.cookie 1.1cookie概念 1.2cook ...

  7. 时间片(time-slicing)轮循调度(round-robin scheduling)

    1.轮循调度 通过tx_thread_relinquish实现. 通过其处理具有相同优先级的多个线程,为相同优先级的所有其他就绪线程提供了在 relinquish 调用方再次执行之前执行的机会. 2. ...

  8. linux多线程顺序打印abc,c++11 多线程依次打印ABC

    并发 练习代码 #include #include #include #include using namespace std; std::mutex mtx; std::condition_vari ...

  9. 常见的面试算法题:创建几个线程按顺序打印数字或者字母(多线程编程)(套用该模板即可)

    常见的面试算法题:创建几个线程按顺序打印数字或者字母(多线程编程)(套用该模板即可) 比较典型的题目,如下有: 题目一: 1.启动3个线程打印递增的数字, 线程1先打印1,2,3,4,5, 然后是线程 ...

最新文章

  1. 【Java】6.4 final 修饰符
  2. python图像开闭区间_自动开闭器不良故障案例分析
  3. jQuery的位置信息和事件
  4. Javascript基础系列之(六)循环语句(do while循环)
  5. android文件读写操作布局文件代码,android实现文件读写功能
  6. duration java_Java Duration类| 带示例的getUnits()方法
  7. WordPress主题zibll子比主题+新增阿里云短信/腾讯云/短信宝/风吹雨短信接口
  8. 查找数组中特定元素_Leetcode 540 题 有序数组中的单一元素
  9. 【颗粒归仓】(四)代码走查工具---StyleCop
  10. 绿点 | 区块链介入下的绿色经济 x 妳格局LadyVision x WinMap+!
  11. 开箱:阿里技术人在读什么书?
  12. 如何使用pr制作视频人物运动残影特效
  13. python bunch制作可导入数据_python – ImportError:无法导入名称Bunch scikit-learn 0.19
  14. MathType无法加载mathpage.wll文件
  15. ecli中@Data标签getset不起作用
  16. Cobaltstrike系列教程(十一)提权与横向移动
  17. ug怎么画曲线_120种UG表达式曲线画法
  18. 《Delta-Sigma数据转换器从入门到精通》笔记之漫谈均值
  19. 代码主题darcula_仿IntelliJ Darcula的Swing主题FlatLaf使用方法
  20. 做一个精致的电子工程师

热门文章

  1. HTML-浮动(特点-影响-居中)-定位
  2. JavaScript 面向对象编程(三) —— 函数进阶 / 严格模式 / 高阶函数 / 闭包 / 浅拷贝和深拷贝
  3. Angular Extends
  4. 7-18 QQ帐户的申请与登陆 (10 分)
  5. 暑假集训-8.05总结
  6. Vue路由 --登录状态的判断
  7. Vagrant 手册之 Provisioning - 基本用法
  8. J2EE如何生成验证码图片和点击刷新验证码
  9. 递归获取字符串内的所有图片src地址
  10. 黑马程序员——程序结构