java线程notify和wait的搭配使用

public class printNum {
    static class SoulutionTask implements Runnable{
        static int value = 0;
        @Override
        public void run() {
            while (value <= 100){
                synchronized (SoulutionTask.class){
                    System.out.println(Thread.currentThread().getName() + ":" + value++);
                    SoulutionTask.class.notify();
                    System.out.println("--------------"+Thread.currentThread().getName() +"-----------");
                    try {
                        SoulutionTask.class.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("#################"+Thread.currentThread().getName() +"################");
                }
            }
        }
    }
    public static void main(String[] args) {
        new Thread(new SoulutionTask(), "偶数").start();
        new Thread(new SoulutionTask(), "奇数").start();
    }
}

因为偶数的线程先触发,所以对于同步锁来说,当偶数线程进入方法后就进行了代码块锁,这时候奇数线程被禁止访问执行,进入了同步阻塞状态。

当偶数线程执行到notify时,奇数线程被唤醒进入就绪状态,等待执行,当偶数线程执行wait之后就偶数线程就进入了等待阻塞状态,不再继续往后执行。而这时候奇数线程进入了同步代码块段,执行顺序和之前偶数线程执行一致,直到奇数线程自己wait后,偶数线程开始执行wait后的代码,再次进行轮循。

代码运行结果:

偶数:0
--------------偶数-----------
奇数:1
--------------奇数-----------
#################偶数################
偶数:2
--------------偶数-----------
#################奇数################
奇数:3
--------------奇数-----------
#################偶数################
偶数:4
--------------偶数-----------
#################奇数################
奇数:5
--------------奇数-----------
#################偶数################
偶数:6
--------------偶数-----------
#################奇数################
奇数:7
--------------奇数-----------
#################偶数################
偶数:8
--------------偶数-----------
#################奇数################
奇数:9
--------------奇数-----------
#################偶数################

 

转载于:https://my.oschina.net/u/3680947/blog/3024253

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值