【JUC源码学习04】LockSupport 工具

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);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值