Java多线程-线程按序交替
2017-07-06 18:38
99 查看
线程按序交替
编写一个程序,开启三个线程,这三个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出的结果必须按顺序显示,如:ABCABCABC……依次递归。使用Condition进行线程间通信即可(也可以使用wait()和notify()):
package JavaThread; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * Created by yangl on 2017/7/6. * 编写一个程序,开启三个线程,这三个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍, * 要求输出的结果必须按顺序显示,如:ABCABCABC......依次递归。 */ public class ABCABCThread { private int number = 1;//当前正在执行线程的标记 private Lock lock = new ReentrantLock(); private Condition condition1 = lock.newCondition(); private Condition condition2 = lock.newCondition(); private Condition condition3 = lock.newCondition(); public void loopA(int totalLoop) { lock.lock(); try { //判断number if (number != 1) { condition1.await(); } for (int i = 0;i <= 0;i++) { System.out.println(Thread.currentThread().getName() + "\t" + i + "\t" + totalLoop); } number = 2; condition2.signal(); } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } } public void loopB(int totalLoop) { lock.lock(); try { //判断number if (number != 2) { condition2.await(); } for (int i = 0;i <= 0;i++) { System.out.println(Thread.currentThread().getName() + "\t" + i + "\t" + totalLoop); } number = 3; condition3.signal(); } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } } public void loopC(int totalLoop) { lock.lock(); try { //判断number if (number != 3) { condition3.await(); } for (int i = 0;i <= 0;i++) { System.out.println(Thread.currentThread().getName() + "\t" + i + "\t" + totalLoop); } number = 1; condition1.signal(); } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } } public static void main(String [] argsd){ ABCABCThread at = new ABCABCThread(); new Thread(new Runnable() { @Override public void run() { for (int i = 0;i < 10;i++){ at.loopA(i); } } },"A").start(); new Thread(new Runnable() { @Override public void run() { for (int i = 0;i < 10;i++){ at.loopB(i); } } },"B").start(); new Thread(new Runnable() { @Override public void run() { for (int i = 0;i < 10;i++){ at.loopC(i); System.out.println("-----------------------------------------------"); } } },"C").start(); } }
相关文章推荐
- Java 多线程 子线程 交替打印 奇偶数
- Java多线程,线程交替执行
- java多线程问题,线程交替执行
- Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数(方法一)
- Java【多线程知识总结(10)】线程通信之wait()与notify()的运用--模拟指挥官指挥2个连队交替轰炸战区
- Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数(方法二)
- Java【多线程知识总结(10)】线程通信之wait()与notify()的运用--模拟指挥官指挥2个连队交替轰炸战区
- 面试必问!Java 多线程中两个线程交替执行,一个输出偶数,一个输出奇数
- Java 多线程中。两个线程交替执行,一个输出偶数,一个输出奇数
- Java【多线程知识总结(10)】线程通信之wait()与notify()的运用--模拟指挥官指挥2个连队交替轰炸战区<另外的写法>
- 彻底明白Java的多线程-线程间的通信
- IBM Java多线程 - 3.无处不在的线程
- JAVA 多线程摘要--线程启动
- 彻底明白Java的多线程-线程间的通信(三)
- 彻底明白Java的多线程-线程间的通信(二)
- IBM Java多线程 - 6.其它线程 API 详细信息
- java高级多线程编程--关于线程的停止问题
- 彻底明白Java的多线程-实现多线程及线程的同步
- java高级多线程编程--关于线程的停止问题
- JAVA多线程-生产者与消费者当线程多时发生死锁的解决方法