java 线程上机题 循环唤醒 三个线程轮流打印 顺序 A线程->B线程->C线程
2017-04-10 20:42
411 查看
package cn.itcast.mybatis.dao; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * 三个线程轮流打印 顺序 A线程->B线程->C线程 * A线程打印5次 * B线程打印10次 * C线程打印5次 * 以上规则运行20轮 * @author zhangkun * */ class ShareSoucre{ Lock lock = new ReentrantLock(); Condition condition1 = lock.newCondition(); Condition condition2 = lock.newCondition(); Condition condition3 = lock.newCondition(); private int number = 1; public void sysa(){ lock.lock(); try { while(number != 1 ) condition1.await(); for (int i = 1; i <= 5; i++) { System.out.println(Thread.currentThread().getName()+"--"+i+"A"); } number = 2; condition2.signal(); } catch (Exception e) { e.printStackTrace(); }finally{ lock.unlock(); } } public void sysb(){ lock.lock(); try { while(number != 2 ) condition2.await(); for (int i = 1; i <= 10; i++) { System.out.println(Thread.currentThread().getName()+"--"+i+"A"); } number = 3; condition3.signal(); } catch (Exception e) { e.printStackTrace(); }finally{ lock.unlock(); } } public void sysc(){ lock.lock(); try { while(number != 3 ) condition3.await(); for (int i = 1; i <= 5; i++) { System.out.println(Thread.currentThread().getName()+"--"+i+"A"); } System.out.println(); number = 1; condition1.signal(); } catch (Exception e) { e.printStackTrace(); }finally{ lock.unlock(); } } } public class MyClass3 { public static void main(String[] args) { final ShareSoucre shareSoucre = new ShareSoucre(); new Thread(new Runnable() { @Override public void run() { for(int i = 0; i < 20; i++)shareSoucre.sysa(); } },"AAA").start(); new Thread(new Runnable() { @Override public void run() { for(int i = 0; i < 20; i++)shareSoucre.sysb(); } },"BBB").start(); new Thread(new Runnable() { @Override public void run() { for(int i = 0; i < 20; i++)shareSoucre.sysc(); } },"CCC").start(); } }
相关文章推荐
- 三个线程轮流执行顺序打印ABC(一):使用Semaphore实现
- java实现三个线程A B C,A线程打印A之后才能B线程打印B,然后接着C线程执行打印C,继而循环下去
- 转:java实现三个线程A B C,A线程打印A之后才能B线程打印B,然后接着C线程执行打印C,继而循环下去
- 转:java实现三个线程A B C,A线程打印A之后才能B线程打印B,然后接着C线程执行打印C,继而循环下去
- 三个线程循环的按顺序打印
- 三个线程轮流执行顺序打印ABC(二):使用Lock+Condition实现
- java实现【有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABC.】
- Java并发面试题:三个线程轮流打印十次abc
- 三个线程轮流执行顺序打印ABC(三):使用Lock实现
- java多线程面试题:三个线程顺序打印ABC,重复10次
- 使用Java 多线程编程 让三个线程轮流输出ABC,循环10次后结束
- 迅雷笔试题 (JAVA多线程)启动三个线程,分别打印A B C,现在写一个程序 循环打印ABCABCABC
- Java并发编程--三个线程顺序打印ABC
- 多线程(至少三个线程)分别打印A、B、C,要求按ABC的顺序循环打印10次。
- 详解使用synchronized解决三个线程依次轮流打印出75个数
- 三个线程顺序打印ABC
- 三个Java多线程循环打印递增的数字,每个线程打印5个数值,打印周期1-75
- C#中添加三个线程同时启动执行某一方法,并依次调用某方法中的循环打印输。
- 多个线程按顺序循环打印线程独有的字符串
- JAVA基础(2) -- 两个线程轮流打印1-100