多线程顺序打印ABC

多线程顺序打印ABC

不断唤醒机制,借用重入锁和条件队列

package com.hnist.lzn.Java8; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /* 多线程顺序打印ABC */ // public class PrintABC {int count = 0; Lock lock = new ReentrantLock(); Condition conditionA = this.lock.newCondition(); Condition conditionB = this.lock.newCondition(); Condition conditionC = this.lock.newCondition(); public class PrintA implementsRunnable{@Override public void run() { while(true){System.out.println("--A---"+count); lock.lock(); System.out.println("A"); try { conditionB.signal(); conditionA.await(); } catch (InterruptedException e) { e.printStackTrace(); }finally { lock.unlock(); }}} }public class PrintB implementsRunnable{@Override public void run() { while(true){System.out.println("--B---"+count); lock.lock(); System.out.println("B"); try { conditionC.signal(); conditionB.await(); } catch (InterruptedException e) { e.printStackTrace(); }finally { lock.unlock(); }} } }public class PrintC implementsRunnable{@Override public void run() { while(true){ //if(count<10){ System.out.println("--C---"+count); lock.lock(); System.out.println("C"); try { conditionA.signal(); conditionC.await(); } catch (InterruptedException e) { e.printStackTrace(); }finally { lock.unlock(); }} } }public static void main(String[] args) {PrintABC printABC=new PrintABC(); new Thread(printABC.new PrintA()).start(); new Thread(printABC.new PrintB()).start(); new Thread(printABC.new PrintC()).start(); }}


结论:1.重入锁配合条件队列,每个条件队列的条件不一样。同时,每个条件都被锁住了。

【多线程顺序打印ABC】

    推荐阅读