唐僧喜欢小龙女

导航

多个线程操作一个变量(Lock)

1、需求三个线程操作同一个变量,顺序的操作

public class WindowSell4 {

    private Lock lock = new ReentrantLock();
    Condition conditionA =  lock.newCondition();
    Condition conditionB=  lock.newCondition();
    Condition conditionC =  lock.newCondition();

    private int num = 1;

    public void printA(){
        lock.lock();

        try{
            while( num != 1){
                conditionA.await();
            }
            num = 2;
            System.out.println("当前线程是"+Thread.currentThread().getName()+"打印的是=>AAAAAAAA");
            conditionB.signal();

        }catch (InterruptedException e){

        }finally {
            lock.unlock();
        }

    }



    public void printB(){
        lock.lock();

        try{
            while( num != 2){
                conditionB.await();
            }
            num = 3;
            System.out.println("当前线程是"+Thread.currentThread().getName()+"打印的是=>BBBBBBB");
            conditionC.signal();

        }catch (InterruptedException e){

        }finally {
            lock.unlock();
        }

    }


    public void printC(){
        lock.lock();

        try{
            while( num != 3){
                conditionC.await();
            }
            num = 1;
            System.out.println("当前线程是"+Thread.currentThread().getName()+"打印的是=>CCCCCC");
            conditionA.signal();

        }catch (InterruptedException e){

        }finally {
            lock.unlock();
        }

    }


}



public class MainTest {
    public static void main(String[] args) {


        WindowSell4 windowSell4 = new WindowSell4();
        new Thread(()->{

                for (int i = 0; i < 12; i++) {
                    windowSell4.printA();
                }



        },"A").start();

        new Thread(()->{

            for (int i = 0; i < 12; i++) {
                windowSell4.printB();
            }
        },"B").start();

        new Thread(()->{

            for (int i = 0; i < 12; i++) {
                windowSell4.printC();
            }
        },"C").start();


    }
}

当前线程是A打印的是=>AAAAAAAA
当前线程是B打印的是=>BBBBBBB
当前线程是C打印的是=>CCCCCC
当前线程是A打印的是=>AAAAAAAA
当前线程是B打印的是=>BBBBBBB
当前线程是C打印的是=>CCCCCC
当前线程是A打印的是=>AAAAAAAA
当前线程是B打印的是=>BBBBBBB
当前线程是C打印的是=>CCCCCC
当前线程是A打印的是=>AAAAAAAA
当前线程是B打印的是=>BBBBBBB
当前线程是C打印的是=>CCCCCC
当前线程是A打印的是=>AAAAAAAA
当前线程是B打印的是=>BBBBBBB
当前线程是C打印的是=>CCCCCC
当前线程是A打印的是=>AAAAAAAA
当前线程是B打印的是=>BBBBBBB
当前线程是C打印的是=>CCCCCC
当前线程是A打印的是=>AAAAAAAA
当前线程是B打印的是=>BBBBBBB
当前线程是C打印的是=>CCCCCC
当前线程是A打印的是=>AAAAAAAA
当前线程是B打印的是=>BBBBBBB
当前线程是C打印的是=>CCCCCC
当前线程是A打印的是=>AAAAAAAA
当前线程是B打印的是=>BBBBBBB
当前线程是C打印的是=>CCCCCC
当前线程是A打印的是=>AAAAAAAA
当前线程是B打印的是=>BBBBBBB
当前线程是C打印的是=>CCCCCC
当前线程是A打印的是=>AAAAAAAA
当前线程是B打印的是=>BBBBBBB
当前线程是C打印的是=>CCCCCC
当前线程是A打印的是=>AAAAAAAA
当前线程是B打印的是=>BBBBBBB
当前线程是C打印的是=>CCCCCC

posted on 2021-05-16 18:19  与时具进&不忘初心  阅读(635)  评论(0)    收藏  举报