《Java修炼指南:高频源码解析》阅读笔记一LockSupport类

LockSupport类是jdk1.6引入的一个工具类,所有的方法都是静态方法。他主要提供了可以使线程阻塞和唤醒的方法,它是JUC中锁和其他并发类实现的基础。LockSupport核心方法都是基于Unsafe类中的Park方法和unpark方法实现的。

1 void park()

类似方法:void parkUntil(long deadline)void parkNanos(long nanos)
阻塞当前线程

2 void park(Object blocker)

线程调用该方法会立即被阻塞挂起,并设置当前线程的parkBlocker字段为blocker对象,这个blocker对象会被记录到阻塞的线程内部。
使用Java诊断工具jstack可以观察线程被阻塞的原因,jstack是通过调用getBlocker(Thread)方法来获取线程的Blocker对象的,所以JDK推荐使用带有Blocker参数的park方法,这样当内存dump排查问题的时候就能知道哪个类被阻塞了。

    public static void park(Object blocker) {
        // 获取当前线程
        Thread t = Thread.currentThread();
        // 设置当前线程的blocker
        setBlocker(t, blocker);
        // 阻塞当前线程
        UNSAFE.park(false, 0L);
        // 线程被唤醒后,需要设置bloker为null,避免下次调用其他park方法时,
        // blocker字段任为此次设置的blocker
        setBlocker(t, null);
    }

3 void unpark(Thread thread)

唤醒线程

注:本文为《Java修炼指南:高频源码解析》阅读笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值