目录
LockSupport 高级
park()
unpark()
两个方法
等待唤醒的三种方法
发展历程
wait() notify()
代码
public class WaitAndNotifyDemo {
static Object obj=new Object();
public static void main(String[] args) {
new Thread(() -> {
synchronized (obj){
System.out.println(Thread.currentThread().getName()+"\t"+"---come in");
try {
obj.wait();
}catch (InterruptedException e){
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"\t"+"---被唤醒");
}
},"t1").start();
new Thread(() ->{
synchronized (obj){
obj.notify();
System.out.println(Thread.currentThread().getName()+"\t"+"---发出通知");
}
},"t2").start();
}
}
输出
wait() 和 notify() 方法只能在
synchronized{} 代码块里面使用
否则会报错
报 moniter illegality 管程不合法的 错
所以 wait() 和 notify() 方法
必须要去锁资源
会阻塞
wait() 和 notify() 的顺序不能错
如果在 notify() 之后 wait() 那就会阻塞