控制三个线程交替打印ABC
2018-01-10 17:38
393 查看
package me.zyc.thread.test; import java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject; import java.util.concurrent.locks.ReentrantLock; public class LoopRunByOrder { private static ReentrantLock lock = new ReentrantLock(); private static String flag = "A"; private static ConditionObject conditionA = (ConditionObject) lock.newCondition(); private static ConditionObject conditionB = (ConditionObject) lock.newCondition(); private static ConditionObject conditionC = (ConditionObject) lock.newCondition(); public static void main(String[] args) throws InterruptedException { new Thread(new TaskA(), "ThreadA").start(); new Thread(new TaskB(), "ThreadB").start(); new Thread(new TaskC(), "ThreadC").start(); } static class TaskA implements Runnable{ @Override public void run() { int i = 5; while(i-- > 0){ lock.lock(); try { if(!flag.equals("A")){ conditionA.await(); } System.out.println("A"); flag = "B"; conditionB.signal(); } catch (Exception e) { // TODO: handle exception } finally{ lock.unlock(); } } } } static class TaskB implements Runnable{ @Override public void run() { int i = 5; while(i-- > 0){ lock.lock(); try { if(!flag.equals("B")){ conditionB.await(); } System.out.println("B"); flag = "C"; conditionC.signal(); } catch (Exception e) { // TODO: handle exception } finally{ lock.unlock(); } } } } static class TaskC implements Runnable{ @Override public void run() { int i = 5; while(i-- > 0){ lock.lock(); try { if(!flag.equals("C")){ conditionC.await(); } System.out.println("C"); flag = "A"; conditionA.signal(); } catch (Exception e) { // TODO: handle exception } finally{ lock.unlock(); } } } } }
运行结果
相关文章推荐
- 建立三个线程,A线程打印10次A,B线程打印10次B,C线程打印10次C,要求线程同时运行,交替打印10次ABC
- 三个线程交替打印ABC
- 建立三个线程,A线程打印10次A,B线程打印10次B,C线程打印10次C,要求线程同时运行,交替打印10次ABC。
- 建立三个线程,A线程打印10次A,B线程打印10次B,C线程打印10次C,要求线程同时运行,交替打印10次ABC。
- 面试题--三个线程循环打印ABC10次的几种解决方法
- 题目:有三个线程分别打印A、B、C,请用多线程编程实现,在屏幕打印10次ABC
- 三个线程交替打印A、B、C的问题
- JAVA三个线程依次打印ABC
- 【面试】--三个线程轮流打印ABC
- Java多线程--三个线程分别打印a,b,c.请用多线程实现循环打印15次abc
- 关于线程的面试题:利用三个线程,循环打印ABC三个数十遍
- 迅雷笔试题 (JAVA多线程)启动三个线程,分别打印A B C,现在写一个程序 循环打印ABCABCABC
- 三个线程轮流执行顺序打印ABC(二):使用Lock+Condition实现
- Java多线程:用三个线程控制循环输出10次ABC
- Semaphore实现的三个线程协作循环打印10次ABC的方法
- Java并发面试题:三个线程轮流打印十次abc
- 循环打印三个线程,ABC 十次
- 多线程(至少三个线程)分别打印A、B、C,要求按ABC的顺序循环打印10次。
- 三个线程ABC,交替打印ABC
- 有三个线程ID分别是ABC,用多线程编程在屏幕上循环打印ABCABC....十次