wait notify正确使用方式

该Java程序展示了如何使用wait/notify机制实现线程间的协调。Thread03找到77和88后分别唤醒Thread01和Thread02,前者打印1-100的奇数,后者打印偶数。

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();
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

齊 天 大 聖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值