Skip to content

并发编程之 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 却可以唤醒一个指定的线程。