前言
简单记录一下wait()和notify()等相关内容,记录于此,方便自己查阅。
正文
wait方法
主要工作
使当前执行代码的线程进行等待。(把线程放到等待队列中)
释放当前的锁
满足条件被notify()唤醒,重新尝试获取这个锁
方法介绍
有两个方法,一个有参数,一个无参数。
wait()
让当前线程进入等待(阻塞)状态。死等,没有唤醒就会一直阻塞。
wait(long timeout)
指定时间内,让线程进入等待(阻塞)状态。
结束条件
其他线程调⽤该对象的notify⽅法。
wait(long timeout)等待过了timeout时间,超时释放。
其他线程调⽤该等待线程的interrupt⽅法,导致wait 抛出 InterruptedException异常,并清除中断标志位,并重新尝试获取锁。
notify()
notify⽅法是唤醒等待的线程,主要配合wait()。
主要工作
⽅法notify()是通知等待该对象的对象锁的其它线程,对其发出通知notify,并使它们重新获取该对象的对象锁。
如果有多个线程等待,则有线程调度器随机挑选出⼀个呈 wait 状态的线程。(并没有 “先来后到”)
在notify()⽅法后,当前线程不会⻢上释放该对象锁,要等到执⾏notify()⽅法的线程将程序执⾏完,也就是退出同步代码块之后才会释放对象锁。
方法介绍
notify()
唤醒同一对象调用正在wait()的线程,如果有多个线程正在wait()就会随机唤醒一个线程
唤醒所有正在wait()的线程。
参考文章
《
历史上的今天
© 版权声明