线程等待机制——wait/notify(notifyAll)


wait、notify、notifyAll属于Object类下的三个普通方法
(java中所有对象都具备这三个方法)
基本使用规则:对象.wait(),使得线程进入“等待”状态,直到有其他线程,在同一个对象上调用notify/notifyAll()方法

语法

关于wait和notify的使用规则,必须先对等待的对象,通过synchronized加锁

Object o = new Object();//等待唤醒的对象
synchronized (o){
   
    o.wait();//如果不这么操作,会收到异常
}
synchronized(o){
   
    o.notify();
}

唤醒的线程如何知道有哪些对象在o这个对象上?
等待集(wait set):保存等在对象上的所有线程
wait:把当前线程加入到等待集中
notify:从wait set删除掉一个线程

由于多个线程修改共享数据,所以需要synchronized保护

wait

wait()的作用就是让当前线程进入等待状态,同时也会让当前线程释放它所持有的锁,直到其他线程调用notify()或notifyAll()方法,被唤醒进入就绪状态;

wait()

wait() / wait(long timeout) / wait(long timeout, int nanos)
time out : 超时
wait什么时候会醒过来:
1、会被别的线程唤醒
2、会在到达超时时间时
3、会在被别的进程打断(interrupt)时->收到一个InterruptException异常

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无赖H4

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值