wait notify正确使用方式

wait notify正确使用方式

假设:当线程(Thread03)在1-100中找出77并输出后,(Thread01)输出所有1-100中的奇数,当线程(Thread03)在1-100中找出88并输出后,(Thread02)输出所有1-100中的偶数。

public class TT {

    //锁
    public static final Object lock = new Object();
    //标记
    public static boolean jishu = false;//true时开始输出奇数
    public static boolean oushu = false;//true时开始输出偶数


    public static void main(String[] args) throws InterruptedException {


        new Thread(new Runnable() {
            @SneakyThrows
            @Override
            public void run() {

                synchronized (lock){
                    while (!jishu){
                        lock.wait();
                    }
                    //输出奇数
                    for (int i=1;i<=100;i++){
                        if (i%2==1){
                            System.out.println("Thread01-奇数输出中:"+i);
                        }
                    }
                }

            }
        },"Thread01").start();

        new Thread(new Runnable() {
            @SneakyThrows
            @Override
            public void run() {
                synchronized (lock){
                    while (!oushu){
                        lock.wait();
                    }
                    //输出偶数
                    for (int i=1;i<=100;i++){
                        if (i%2==0){
                            System.out.println("Thread02-偶数输出中:"+i);
                        }
                    }
                }
            }
        },"Thread02").start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (lock){
                    for (int i=1;i<=100;i++){
                        if (i==77){
                            System.out.println("Thread03-找到了:"+i);
                            jishu=true;
                            lock.notifyAll();
                        }
                        if (i==88){
                            System.out.println("Thread03-找到了:"+i);
                            oushu=true;
                            lock.notifyAll();
                        }
                    }
                }
            }
        },"Thread03").start();
        
    }
}

模板

synchronized(lock) {
 while(条件不成立) {
 lock.wait();
 }
 // 干活
}
//另一个线程
synchronized(lock) {
 lock.notifyAll();
}

你可能感兴趣的:(JUC,java,开发语言)