LockSupport

LockSupport

LockSupport定义了一组公共的静态方法,提供了最基本的线程阻塞和唤醒功能,LockSupport也是构建同步组件(AQS)的基础工具。

park开头的方法用来阻塞当前线程,以及unpark(Thread thread)方法来唤醒一个被阻塞的线程。

方法

方法描述
void unpark(Thread thread)唤醒处于阻塞状态的线程
void park()阻塞当前线程,调用 unpark 方法或者当前线程被中断,才能从 park 方法返回
void parkNanos(long nanos)阻塞当前线程,最长不超过 nanos 纳秒,返回条件在 park 的基础上增加了超时返回
void parkUntil(long deadline)阻塞当前线程,直到 deadline 时间(从1970年开始到 deadline 时间的毫秒数)

JDK 6中增加了park(Object blocker)parkNanos(Object blocker, long nanos)parkUntil(Object blocker, long deadline)3个方法,也是用于阻塞当前线程,其中参数blocker用于表示当前线程在等待的对象,主要用于问题排查和系统监控。

通过setBlocker(Thread t, Object arg)方法将blocker变量存放到当前线程的parkBlocker成员变量中。

示例

public class LockSupportTest {
   public static void main(String[] args) throws InterruptedException {
      Thread thread = new Thread(() -> {
         System.out.println("Child thread begin park");
         LockSupport.park();
         System.out.println("child thread unpark");
      });
      thread.start();
      Thread.sleep(1000);
      LockSupport.unpark(thread);
      // thread.interrupt();
   }
}

版权声明:本文为sunyqcn原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。