关于wait()、notify()、notifyAll()方法的使用

本文深入解析Java中的wait、notify和notifyAll方法,它们用于线程间的通信和同步。wait会使当前线程等待,释放同步锁;notify唤醒一个等待的线程,而notifyAll唤醒所有等待线程。调用这些方法必须在同步环境中,否则会抛出异常。同时,对比了wait与sleep方法的区别,wait会释放同步监视器,而sleep不会。

wait():一旦执行此方法,当前线程就会进入阻塞状态,并且释放同步锁。

  • notify():一旦执行此方法,就会唤醒一个被wait()阻塞的线程,如果有多个线程则唤醒优先级高的,都一样则随机

  • notifyAll():一旦执行此方法,就会唤醒所有被wait()阻塞的线程

  • 注意事项:

  • 1.wait()、notify()、notifyAll()都必须使用在synchronized包住的同步代码块或者同步方法之中

  • 2.wait()、notify()、notifyAll()的调用者和同步监视器是一致的,也就是说如果不一致就会出现

  • illegalMonitorStateException异常

  • 3.wait()、notify()、notifyAll()的方法被定义在Java.lang.Object类中,以保证每个类的对象都能调用。

  • wait()方法和sleep()方法的异同:

  • 相同点:都能使当前线程进入阻塞状态

  • 不同点:1)两个方法申明的位置不同:sleep()方法在Thread类中申明,wait()方法在Object类中申明

  •    2)两个方法调用的要求不同:sleep()方法可以在任何需要的场景调用,而wait()方法只能在同步代码块或者同步方法之中调用
    
  •    3)如果两个方法都使用在同步代码块或者同步方法中,sleep()不会释放同步监视器,而wait()会释放同步监视器
    
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值