LockSupport
概述
LockSupport是一个编程工具类,主要是为了阻塞和唤醒线程。它的所有方法都是静态方法,它可以让线程在任意位置阻塞,也可以在任意位置唤醒。
它可以在阻塞线程时为线程设置一个blocker,这个blocker是用来记录线程被阻塞时被谁阻塞的,用于线程监控和分析工具来定位原因。
LockSupport类与每个使用它的线程都会关联一个许可证,在默认情况下调用LockSupport类的方法的线程是不持有许可证的。
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(() -> {
System.out.println("线程开始执行");
LockSupport.park();
System.out.println("线程执行结束");
});
thread.start();
TimeUnit.SECONDS.sleep(3);
System.out.println("执行unpark");
LockSupport.unpark(thread);
}
和wait/notify区别
- wait和notify都必须先获得锁对象才能调用,但是park不需要获取某个对象的锁就可以锁住线程。
- notify只能随机选择一个线程唤醒,无法唤醒指定的线程,unpark却可以唤醒一个指定的线程。
重要方法
这些方法都是调用Unsafe类的native方法
private static final sun.misc.Unsafe UNSAFE;
public final class Unsafe {
public native void park(