wait和notify方法
- wait、notify、notifyAll都是Object的方法
- wait、notify、notifyAll都需要先获得对象锁,即在synchronized之中
- wait阻塞当前线程,并释放锁
- notify随机唤醒一个因调用该对象锁的wait方法而阻塞的线程,使其重新去竞争锁,执行完notify并不会释放锁,仍然是synchronized方法执行完后释放锁
- notifyAll唤醒所有因调用该对象锁的wait方法而阻塞的线程
Object o = new Object();
new Thread(()->{
synchronized (o){
System.out.println("1s");
try {
o.wait();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println("1e");
}
}).start();
Thread.sleep(1000);
new Thread(()->{
synchronized (o){
System.out.println("2s");
o.notify();
System.out.println("2e");
}
}).start();
1s
2s
2e
1e
join方法