Java中Object的wait(),notify(),notifyAll()理解

Object

  • java中所有的类都会隐式的继承Object,但是Object的wait,notify,notifyAll我们又真的会用吗
synchronized

synchronized是用来保证我们的一段代码在执行的过程中不会被中断而引起并发问题,synchronized可以修饰一个函数,某一段代码而wait()函数就应该在synchronized代码块中执行

synchronized使用场景

当我们有多个线程同时开启,但是在某一个特定时刻只有一个线程在真正的执行,当我们需要一段代码执行完而不被中断那么我们那就应该使用synchronized包裹这一段代码,那么这段代码就是持有了锁,下面我们引入两个概念

  • 锁池:假设线程A已经拥有了某个对象(注意:不是类)的锁,而其它的线程想要调用这个对象的某个synchronized方法(或者synchronized块),由于这些线程在进入对象的synchronized方法之前必须先获得该对象的锁的拥有权,但是该对象的锁目前正被线程A拥有,所以这些线程就进入了该对象的锁池中。
  • 等待池:假设一个线程A调用了某个对象的wait()方法,线程A就会释放该对象的锁后,进入到了该对象的等待池中

概念来源:Java中的锁池和等待池

wait(),notify(),notifyAll()

  • wait() 使当前代码块进去等待池
  • notify()让等待池中随机一个线程进行锁池,这个线程将有竞争锁的资格(这时候就有两个线程具有竞争资格调用notify()的线程和被notify()唤醒的线程)
  • notifyAll()使所有线程进入锁池,都具有竞争锁的资格(所有线程都具有竞争资格)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值