LockSupport与Condition解析

本章我们介绍两个Java 并发包中用于线程协作的工具--LockSupport和Condition

LockSupport:

Java 并发包(java.util.concurrent.locks)提供了基于许可(permit)的线程阻塞和唤醒机制--LockSupport

对于LockSupport是通过方法park以及unpark来对线程进行阻塞和唤醒的

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


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

    }

我们可以看出park方法很简单只是调用了Unsafe 的方法park。Unsafe 正如它名字而言是 Java 中一个 高度危险且未被官方正式支持 的类,位于 sun.misc 包下(JDK 9 后移至 jdk.internal.misc 包)。它提供了一系列 直接操作底层资源 的方法,允许开发者绕过 Java 语言的安全机制,直接访问内存、操作线程状态等。所以LockSupport就是基于unsafe类进行包装后的类,将原来的不安全类封装成了一个安全类供开发者使用。对于park方法的两个参数一个是Boolean类型一个是long类型,分别用来表示是否为绝对时间以及阻塞的时长,对于0L则是永久阻塞。

对于unpark方法来说则是多了一个参数Thread,这个参数的作用是用来指定唤醒的线程。为什么park不需要参数而unpark需要参数呢,因为unpark唤醒的都是其他线程,当本线程进入阻塞后则无法自己唤醒自己只能通过其他线程来唤醒自己。

Condition:

Condition 是 Java 并发包(java.util.concurrent.locks)中的一个接口,用于替代传统的 Object.wait()Object.notify() 和 Object.notifyAll(),提供更灵活、更强大的线程间协作机制。它通常与 Lock 接口配合使用,实现精细化的线程等待和唤醒操作。

也就是说Condition的定位其实与Object.wait类似,都是协助锁来实现线程的协作机制。

特性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值