LockSupport是优化版的等待和唤醒机制
- wait 和 notify 需要和 synchronized 结合使用
- await 和 signal 需要和 Lock 结合使用
- 它们都必须是先等待再唤醒
- LockSupport可以单独使用, 直接唤醒指定的线程,而且跟顺序无关,可以先 unpart 再park
底层原理
调用的是底层Unsafe类的native 方法
每个线程都最多只会有一个许可证关联,调用多次不会累加
调用一次park 会消费permit
Thread a = new Thread(() -> {
try {
TimeUnit.SECONDS.sleep(3L);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "----come in ");
LockSupport.park();
System.out.println(Thread.currentThread().getName() + "----被唤醒");
}, "AA");
a.start();
new Thread(() -> {
System.out.println(Thread.currentThread().getName() + "----come in ");
LockSupport.unpark(a);
System.out.println(Thread.currentThread().getName() + "----通知了");
}, "BB").start();