二十二、锁支持工具 LockSupport

锁支持工具 LockSupport

1. 前言

本节带领大家认识第三个常用的 Java 并发锁工具之 LockSupport

本节先介绍 LockSupport 工具类的用途,然后介绍关键的编程方法,最后通过一个编程例子为大家展示 StampedLock 工具类的用法。

下面我们正式开始介绍吧。

2. 概念解释

LockSupport 是一个线程工具类,提供的方法均是静态方法,可使用类型直接调用。其定义的一组以 park 开头的方法用于阻塞当前线程,定义的 unpark 方法用于唤醒被阻塞的线程。

LockSupport 提供的这种功能,应用在哪些场合比较合适呢?下面我们给出最常用的场景说明。

3. 常用场景

LockSupport 可以在任何场合使用它阻塞线程,也可以对指定的任何线程进行唤醒,而不用担心阻塞和唤醒操作的顺序。
JDK 并发包下的锁和其他同步工具在底层实现中大量使用了 LockSupport 工具类 进行线程的阻塞和唤醒,了解其用法和原理,可以更好地理解锁和其它同步工具的底层实现。

下面我们通过一个编程例子体会一下 LockSupport 工具类的用法。

4. 编程案例

import java.util.concurrent.locks.LockSupport;

public class LockSupportTest {

    public static void main(String[] args) throws InterruptedException {

        Thread t1 = new Thread(new Runnable() {
            public void run() {
                System.out.println(Thread.currentThread().getName() + "即将被中断");
                LockSupport.park();
                System.out.println(Thread.currentThread().getName() + "已经被中断");
            }
        });
        t1.setName("实验线程");
        // 线程启动立刻执行,在线程内调用了 park 做了线程中断
        t1.start();

        Thread.sleep(5000L);
        // 5 秒后唤醒中断的线程 t1
        LockSupport.unpark(t1);
        System.out.println(t1.getName() + "被恢复中断了");

        Thread.sleep(100000L);
    }
}

运行结果如下:

实验线程准备被中断
实验线程已经被中断了
实验线程被恢复中断了

用法是不是很简单呢?但其中的原理可没有那么简单,需要我们继续深入学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jysf98746

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值