美文网首页
多线程 交替打印,控制线程执行顺序 ReentrantLock

多线程 交替打印,控制线程执行顺序 ReentrantLock

作者: 川流不息attitude | 来源:发表于2021-02-26 22:08 被阅读0次
    import java.util.concurrent.locks.Condition;
    
    import java.util.concurrent.locks.Lock;
    
    import java.util.concurrent.locks.ReentrantLock;
    
    /**
    
    * @author lyc
    
    * @date 2021/2/20
    
    */
    
    public class TestThread {
    
    private static int j =0;
    
        static Locklock =new ReentrantLock();
    
        static ConditionconditionA =lock.newCondition();
    
        static ConditionconditionB =lock.newCondition();
    
        static ConditionconditionC =lock.newCondition();
    
        public void printA()throws InterruptedException {
    
    lock.lock();
    
            while (j!=0){
    
    conditionA.await();
    
            }
    
    System.out.print(Thread.currentThread().getName()+"A");
    
            j++;
    
            conditionB.signal();
    
            lock.unlock();
    
        }
    
    public void printB()throws InterruptedException {
    
    lock.lock();
    
            while (j!=1){
    
    conditionB.await();
    
            }
    
    System.out.print(Thread.currentThread().getName()+"B");
    
            j++;
    
            conditionC.signal();
    
            lock.unlock();
    
        }
    
    public void printC()throws InterruptedException {
    
    lock.lock();
    
            while (j!=2){
    
    conditionC.await();
    
            }
    
    System.out.println(Thread.currentThread().getName()+"C");
    
            j =0;
    
            conditionA.signal();
    
            lock.unlock();
    
        }
    
    public static void main(String[] args)throws InterruptedException {
    
    TestThread testThread =new TestThread();
    
            new Thread(()->{
    
    try {
    
    for (int i =0; i <5; i++) {
    
    testThread.printA();
    
                    }
    
    }catch (InterruptedException e) {
    
    e.printStackTrace();
    
                }
    
    }).start();
    
            new Thread(()->{
    
    try {
    
    for (int i =0; i <5; i++) {
    
    testThread.printB();
    
                    }
    
    }catch (InterruptedException e) {
    
    e.printStackTrace();
    
                }
    
    }).start();
    
            new Thread(()->{
    
    try {
    
    for (int i =0; i <5; i++) {
    
    testThread.printC();
    
                    }
    
    }catch (InterruptedException e) {
    
    e.printStackTrace();
    
                }
    
    }).start();
    
        }
    
    }
    
    

    相关文章

      网友评论

          本文标题:多线程 交替打印,控制线程执行顺序 ReentrantLock

          本文链接:https://www.haomeiwen.com/subject/lywvfltx.html