并发编程之 LockSupport
LockSupport 是一个编程工具类,主要是为了阻塞和唤醒线程用的。
它的内部其实两类主要的方法:park(停车阻塞线程)和 unpark(启动唤醒线程)。
示例
java
public class LockTest8 {
/**
* t1 --a
* t2 --b
* @param args
*/
public static void main(String[] args) {
Thread t1 = new Thread(() -> {
LockSupport.park();
log.debug("a");
}, "t1");
t1.start();
new Thread(() -> {
log.debug("b");
LockSupport.unpark(t1);
},"t2").start();
}
}
和 wait/notify 的区别
这里主要有两点:
- wait 和 notify 都是 Object 中的方法, 在调用这两个方法前必须先获得锁对象,但是 park 不需要获取某个对象的锁就可以锁住线程。
- notify 只能随机选择一个线程唤醒,无法唤醒指定的线程,unpark 却可以唤醒一个指定的线程。