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

2021-02-26  本文已影响0人  川流不息attitude
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();

    }

}

上一篇下一篇

猜你喜欢

热点阅读