当前位置: 代码迷 >> 综合 >> 【JUC源码学习04】LockSupport 工具
  详细解决方案

【JUC源码学习04】LockSupport 工具

热度:115   发布时间:2023-10-27 00:11:02.0

LockSupport 工具

当需要阻塞或者唤醒一个线程的时候,都会使用 LockSupport 工具类来完成响应工作。LockSupport 定义了一组的公共静态方法,这些方法提供了最基本的线程阻塞和唤醒功能。

以 park()开头的来阻塞线程

以 unpark()开头的来唤醒线程

一、阻塞线程

1、park(Object blocker)

blocker对象用来标识当前线程在等待的对象(阻塞对象)。该对象主要用于问题排查和系统监控。

  public static void park(Object blocker) {
    Thread t = Thread.currentThread();setBlocker(t, blocker);UNSAFE.park(false, 0L);setBlocker(t, null);}

有阻塞对象的方法,可以传递给开发人员更多的现场信息。

2、park()

阻塞当前线程,如果调用 unpark(Thread thread)方法或者当前线程被中断,曹能从 park()线程返回。

 	public static void park() {
    UNSAFE.park(false, 0L);}

3、parkNanos(long nanos)

阻塞当前线程,最长不超过nanos纳秒。

  public static void parkNanos(long nanos) {
    if (nanos > 0)UNSAFE.park(false, nanos);}

4、parkUntil(long deadline)

阻塞当前对象,直到 deadline 时间。(从 1970 年开始到 deadline 时间的毫秒数)

 	public static void parkUntil(long deadline) {
    UNSAFE.park(true, deadline);}

二、唤醒阻塞的线程

1、unpark(Thread thread)

唤醒处于阻塞状态的线程thread。

	 public static void unpark(Thread thread) {
    if (thread != null)UNSAFE.unpark(thread);}