本质是考察对象锁、Object.wait()/notify()/notifyAll()的使用(当然也可以用ReentrantLock和LockSupport)。需要注意的是执行wait()方法后会立即释放对象上的锁,而不是等待synchronized中的代码执行完才释放。不相信的可以自己写一下代码验证一下。
重新复习一下wait、notify、notifyAll的含义:
1、让正在o对象上活动的线程立刻马上会释放o对象的锁,进入等待状态,调用wait()方法后面的代码均因失去锁而暂停执行,无限期等待,直到被唤醒为止。
2、notify/notifyAll 只会通知,不会释放锁。
3、notify/notifyAll 会抛出:IllegalMonitorStateException 异常,多半是因为对象不是同一个对象,这个尤其要注意
Deamon展示:
public class TestPrintDaemon {
private static final Object object = new Object();
public static void main(String[] args) {
Thread t1 = new Thread(() -> {
in