wait与notify线程之间的通信

wait与notify线程之间的通信

1.wait与notify是使用在同步代码块或同步方法中的
2.他们都是Object的方法
3.notify是需要获取锁的,会随机唤醒一个处理等待状态的线程
4.wait方法是会释放锁的
5.notifyAll会唤醒所有wait的线程,但是拿到cup时间片的线程只有一个

6.Thread类的一个方法join()
B线程在A线程中调用join()方法,那么A线程会等待B线程的执行完毕,A线程才继续往下执行

package com.roy.condition;

/**
 * @Authror royLuo
 * @Date 2020/2/29 14:59
 **/
public class WaitAndNotifyDemo {

    //定义信号量
    private int signal;

    public synchronized void a(){
        while (signal!=0){
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        signal++;
        System.out.println("a");
        notifyAll();
    }
    public synchronized void b(){
        while (signal!=1){
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        signal++;
        System.out.println("b");
        notifyAll();
    }

    public synchronized void c(){
        while (signal!=2){
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println("c");
        signal = 0 ;
        notifyAll();
    }

    public static void main(String[] args) {
       WaitAndNotifyDemo demo =  new WaitAndNotifyDemo();
       new Thread(new E(demo)).start();
       new Thread(new F(demo)).start();
       new Thread(new G(demo)).start();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("执行完毕");
    }

}
class E  implements Runnable{

    private  WaitAndNotifyDemo demo;


    public E(WaitAndNotifyDemo demo){
        this.demo =demo;
    }

    @Override
    public void run() {
        while (true)
            demo.a();
    }
}
class F  implements Runnable{

    private  WaitAndNotifyDemo demo;


    public F(WaitAndNotifyDemo demo){
        this.demo =demo;
    }

    @Override
    public void run() {
        while (true)
            demo.b();
    }
}
class G  implements Runnable{

    private  WaitAndNotifyDemo demo;


    public G(WaitAndNotifyDemo demo){
        this.demo =demo;
    }

    @Override
    public void run() {
        while (true)
            demo.c();
    }
}

DCD

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值