wait和notify

wait(): 死等,直到被唤醒或中断

  • 概念:使得当前线程立刻停止运行,处于等待状态。并将当前线程置入锁对象的等待队列中,直到被通知(notify())或被中断为止。
  • 使用条件:只能在同步方法或同步代码块中使用,必须是内建锁。
  • wait()调用后立刻释放对象锁。
public final   native void wait(long  timeout)throws InterruptedException

超时等待。若在规定时间内未被唤醒则线程退出,单位是毫秒
notify():

public  final native void notify()
  • 概念:唤醒处于等待状态的线程
  • 使用条件:必须在同步方法或同步代码块中使用,用来唤醒等待该对象的其他线程,若有多个线程在等待,随机挑选一个唤醒
  • notify()方法调用后,当前线程不会立马释放对象锁,要等到当前线程执行完毕后在释放锁

notifyAll(): 唤醒所有处于等待队列头部的线程,从队列尾唤醒到队列头
每个锁对象都有两个队列,同步队列和等待队列

  • 同步队列:存储获取锁失败的线程
  • 等待队列:存储调用wait的线程

调用nitify方法唤醒线程就是将线程从等待队列移到同步队列中,与其他线程竞争获取锁

线程从运行到阻塞的几种情况:

  • 调用sleep(),立即交出CPU,但不会释放对象锁
  • 线程获取锁失败
  • 线程调用阻塞式IO
  • 线程调用wait()
  • 线程susped(),将线程挂起
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值