LockSupport工具类-入门级

LockSupport从入门到深入理解 LockSupport Condition ,wait,notify 阅读详情
是什么

LockSupport 是JDK内部提供阻塞和唤醒线程的工具类。

  • void park()方法

    如果线程未获得许可证的前提下,调用了park方法将进行阻塞,否则不会阻塞直接返回。

  • void unpark(Thread thread) 方法

    当某线程调用unpark(Thread thread) 方法时,传入方法中对应的线程将会获得许可证。

  • void parkNanos(long nanos) 方法

    与 park()方法类似,只不过该方法会等到nanos 秒之后,如发现还未获得许可证,那么将不会继续进行阻塞而是直接返回。

  • void park(Object blocker) 方法

    与park()方法类似,只不过该方法将blocker对象信息存放到调用该park(Object blocker) 方法的线程的成员变量中去。

怎么用

需求:我们现在希望A线程等待B线程处理1+2+3+…+100 求和运算成功之后,继续处理它的逻辑,且看下面代码

public class LockSupportDemo {
    public static void main(String[] args) throws NoSuchFieldException, InterruptedException {
      
        Thread a = new Thread(() -> {
            System.out.println("等待B线程完成它的求和逻辑...");
            //2.
            LockSupport.park();
            System.out.println("B线程已处理完毕...A线程继续处理逻辑");
        });
       
        Thread b = new Thread(() -> {
            sumCalc();
            //3.
            LockSupport.unpark(a);
        });

        a.start();
        //1.
        Thread.sleep(1000);
        b.start();
    }

    private static void sumCalc() {
        System.out.println("B线程进行求和运算中,结果为:" + IntStream.range(1, 100).reduce(0, Integer::sum));
    }
}

运行结果:

等待B线程完成它的求和逻辑...
B线程进行求和运算中,结果为:4950
B线程已处理完毕...A线程继续处理逻辑

代码(1)处,我们对主线程进行sleep 1秒 是为了保证A线程能先执行。代码(2)处,A线程未取得许可证将进行阻塞。代码(3)处,B线程调用unpark(Thread thread)并将A线程传入,A线程立即获得许可证不再进行阻塞。

书写技术文章是一个循序渐进的过程,所以我不能保证每句话、每行代码都是对的,但至少能保证不复制、不粘贴,每篇文章都是自己对技术的认识、细心斟酌总结出来的。乔布斯说:我们在这个星球上的时间都很短,很少有机会去做几件真正伟大的事情,同时要做得好,我必须要趁我还年轻的时候完成这些事。
其实我想说的是,我是一枚程序员,我只想在有限的时间内尽可能去沉淀我这一生中所能沉淀下来的东西。

LockSupport工具类的使用 LockSupport、park、unpark 阅读详情

相关推荐

直流无刷减速电机选型指南:从KV值到霍尔传感器,新手必看的5个关键参数

本文详细解析直流无刷减速电机选型的5个关键参数,包括KV值、转矩、电流与功率、减速比选择以及霍尔传感器配置。通过实战案例和避坑策略,帮助工程师精准匹配电机性能与负载需求,提升工业自动化设备的可靠性和效率。特别强调霍尔传感器在精准控制中的关键作用。

alice7model的博客 621

java之并发包中的LockSupport类

前言 JDK中的JUC下包含了各种锁,而实现锁的AQS等中使用了LockSupport这个工具类,所以在学习其他源码之前,很有必要去了解一下LockSupport工具类的原理。 LockSupport相关 LockSupport类是JDK中rt.jar包下面的一个工具类,它的主要作用是挂起和唤醒线程。该工具类是创建锁和其他同步类的基础。 可以这么理解,LockSupport类与每个使用他的线程会关联一个许可证,在默认情况下条用LockSupport类的方法的线程是不持有许可证的。LockSupport是使用

俩只猴的博客 540

MOSFET高频响应实战:如何用LTspice仿真内部电容效应(附模型文件)

本文深入解析MOSFET高频响应中的内部电容效应,通过LTspice仿真工具详细展示如何提取模型参数并优化高频特性。从栅极相关电容到结电容的物理本质,再到实战案例中的开关损耗分析和频率响应扫描,提供全面的设计优化方法,帮助工程师有效应对高速开关电路中的电容挑战。

weixin_33725722的博客 390

LockSupport详解

LockSupport 是 Java 并发包(java.util.concurrent)中的一个工具类,提供了基本的线程阻塞和唤醒机制。它主要用于实现锁和其他同步类,如AQS、 ReentrantLock、Semaphore、CountDownLatch 等。LockSupport 提供的主要方法是park和unpark,它们分别用于挂起和唤醒线程(会让线程进入WATING状态)。AQS中对线程进行挂起和唤醒操作最终使用的就是和。AQS相关内容可以参考 我的上一篇博客AQS详解。

落日的博客 1793

【python】geopandas库安装出现各种问题?可以看看这篇文章

geopandas的安装方法

jgsecurity的博客 3887

如何在INCA中修改标定量的初始值,并刷回控制器

测试过程中,有些时候,标定量来不及修改,这就需要修改标定量的初始值了,又不想打开模型重新编译,因此直接在INCA中修改,然后再刷回控制器,就成了最佳选择,之前也学过,长时间不用,忘记怎么搞了,最近又用到了,这次记录一下,以后用到的时候,就不用在网上东翻西找了。截止到2023年11月24日,共找到了两种方法可以实现修改。

weixin_43406519的博客 4200

LockSupport

javadoc 用于创建锁和其他同步类的基本线程阻塞原语。 这个类与每个使用它的线程相关联,一个许可证(在Semaphore类的意义上)。如果许可证可用,则呼叫park将park返回,在此过程中消耗它;否则可能会阻止。 调用unpark使许可证可用,如果尚不可用。(与信号量不同,许可证不能累积,最多只有一个。) 方法park和unpark提供了阻止和解除阻塞线程的有效手段,该方法不会遇到导致不推荐使用的方法Thread.suspend和Thread.resume目的不能使用的问题: 一个...

java_kider的博客 462

matlab 三维绘图 抛光,瓷砖抛光过程建模与仿真

:瓷砖抛 光过程 建模与仿真朱 成 就(广 东工业大学 机 电工程 学院, 广东广州 )摘要 :瓷砖的抛磨影响 因素众 多 ,实际磨削加工时容易出现漏抛 、返抛现象 。对陶瓷抛光机磨头进行运动学分析 ,并基于不 同粒度号 的磨 粒在一定压力下的加工深度模型 ,探讨抛光机磨 头转 速 、横梁摆动频率 、传送速度对瓷砖抛光加工表 面均匀性 的影响,然 后结合 磨削机理使 用 对陶瓷抛光过程进行仿真 ...

weixin_36331058的博客 747

Java并发 - LockSupport详解

`LockSupport`是Java中用于实现线程阻塞和唤醒的工具类。它提供了一种基于线程的阻塞原语,能够在不需要持有锁的情况下实现线程的挂起和唤醒操作。

--土拨鼠-- 1921

Windows事件ID 10010报错:DCOM注册超时与Game Bar修复指南

DCOM(分布式组件对象模型)是Windows中用于跨进程组件通信的核心机制,其注册超时问题常表现为事件ID 10010报错。当Game Bar的PresenceWriter组件因权限配置不当、组件损坏或开机资源竞争而无法在限定时间内向DCOM注册时,系统会记录该错误,并可能伴随DCOM服务主机CPU占用升高或游戏栏功能异常。理解DCOM激活原理与Network Service账户权限,有助于从权限修复、组件重注册及开机时序优化等层面系统排查。本文针对不同Windows版本,提供从静默处理到根治的完整方案,

weixin_33563728的博客 923

海思SD3403/SS928V100开发(6)单路GMSL-MIPI-YUV相机视频输入调试

硬件连接:森云GMSL相机 -> GMSL 解串器 -> SD3403 MIPI0暂时先进行单路视频输入通路调试。

jzwjzw19900922的博客 1934

java高并发系列 - 第14天:JUC中的LockSupport工具类,必备技能

java高并发系列第14篇文章本文主要内容:讲解3种让线程等待和唤醒的方法,每种方法配合具体的示例介绍LockSupport主要用法对比3种方式,了解他们之间的区别Loc...

路人甲Java 968

NVIDIA Isaac GR00T N1 人形机器人强化学习入门教程(二)详细步骤

LeRobot 格式 1.1 加载数据集 要加载数据集,我们需要定义以下 3 项内容: 在数据中显示图像帧 我们还可以对 LeRobotSingleDataset 类中的数据进行一系列转换。下面展示了如何对数据进行转换。 现在看看应用转换后的数据有何不同。 例如,对状态和操作进行规范化和串联,对视频图像进行裁剪、调整大小和颜色抖动。 二、GR00T 推断 本教程介绍如何使用 GR00

2506_90492529的博客 3013

锁原理剖析-LockSupport工具类

使用诊断工具可以观察线程被阻塞的原因,诊断工具是通过调用getBlocker(Thread)方法来获取blocker对象的,所以JDK推荐我们使用带有blocker参数的park方法,并且blocker被设置为this,这样当在打印线程堆栈排查问题时就能知道是哪个类被阻塞了。,然后添加thread.interrupt();如果调用park方法的线程已经拿到了与LockSupport关联的许可证,则调用LockSupport.park()时会马上返回,否则调用线程会被禁止参与线程的调度,也就是会被阻塞挂起。

andy的博客 966

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

LockSupport工具类

LockSupport工具类介绍源码原理 介绍 用于创建锁和其他同步类的基本线程阻塞(不释放锁)原语。 源码 public class LockSupport { private LockSupport() {} // 不能实例化 private static void setBlocker(Thread t, Object arg) { UNSAFE.putOb...

wanghui115521的专栏 203

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

LockSupport 线程工具类

文章目录一、LockSupport简介1、LockSupport是什么2、与wait/notify对比二、源码分析(基于jdk1.8)1、park方法2、unpark三、LockSupport使用1、先interrupt再park2、先unpark再park LockSupport是一个编程工具类,主要是为了阻塞和唤醒线程用的。使用它我们可以实现很多功能。 一、LockSupport简介 1、LockSupport是什么 LockSupport是一个线程工具类,所有的方法都是静态方法,可以让线程在任意位置阻

憧憬的专栏 246

LockSupport 工具类介绍以及使用

LockSupport 工具类 JDK中的rt.jar包里面的是个LockSupport是个工具类,它的主要作用是挂起和唤醒线程,该工具类是创建锁和其他同步类的基础。 LockSupport类与每个使用它的线程都会关联一个许可证,在默认情况下调用LockSupport类的方法的线程是不持有许可证的。LockSupport是使用Unsafe类实现的,下面介绍LockSupport中的几个主要函数。 void park() 如果调用park方法的线程已经拿到了与LockSupport关联的许可证,则调用Lock

小铛D的博客 527

LockSupport工具类学习

jdk的rt.jar包里面的LockSupport是个工具类,主要作用了挂起和唤醒线程,该工具类是创建锁和其他同步类的几次。 调用park()系列的方法可以使线程进入阻塞状态,调用unpark方法可以唤醒。 功能类似wait和notify,但是不需要像wait和notify那样必须在synchronized的范围内使用 且如果先调用了unpark再调用park,此线程是不会进入阻塞状态的,原因是调...

hello world 235

深入剖析 Java 并发基石:LockSupport 工具类

在 Java 并发编程的浩瀚宇宙中,我们熟知 synchronized关键字、ReentrantLock显式锁以及各种并发集合。然而,在这些高楼大厦之下,埋藏着一位低调但至关重要的基石工匠——LockSupport​ 工具类。

一起探索IT的世界 871

并发工具类之 LockSupport

当需要阻塞或唤醒一个线程的时候,我们可以使用 LockSupport 工具类来完成,它提供的部分方法如下图: 测试代码如下: public class TestLockSupport { public static void main(String[] args) { Thread thread = new Thread(() -> { for (int i = 0; i < 10; i++) { System.o

明月燃雨 184

浅析Lock工具类LockSupport

LockSupport是一个编程工具类,主要是为了阻塞和唤醒线程用的,所有的方法都是静态方法,可以让线程在任意位置阻塞,也可以在任意位置唤醒。使用它我们可以实现很多功能,今天主要就是对这个工具类的讲解,希望对你有帮助。 文章目录 ...

wh柒八九的博客 416

LockSupport 是什么?怎么用?

前言 本文隶属于专栏《100个问题搞定Java并发》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见100个问题搞定Java并发 正文 LockSupport 是一个非常方便实用的线程阻塞工具,它可以在线程内任意位置让线程阻塞。 与 Thread.suspend() 方法相比,它弥补了由于 resume() 方法发生导致线程无法继续执行的情况。 关于 suspend 和 resume 请参考我的博客——线程的挂起(suspend)和继续执行(r

Shockang的博客 7180

浅谈LockSupport工具类

引 Java的并发包是基于AQS (AbstractQueuedSynchronizer)框架的,AQS框架需要借助于两个工具类: Unsafe(提供CAS操作) LockSupport(提供park/unpark操作) LockSupport的使用 LockSupport定义了一组公共静态方法,这些方法提供了最基本的线程阻塞和唤醒功能。LockSupport定义了一组以park开头的方法用来阻塞当前线程,以及unpark(Thread thread)方法来唤醒一个被阻塞的线程。 在Java6

燕然一勒的博客 280

java中的locksupport_java中线程的停止以及LockSupport工具类

看jstack输出的时候,可以发现很多状态都是TIMED_WAITING(parking),如下所示:"http-bio-8080-exec-16" #70 daemon prio=5 os_prio=0 tid=0x00007f6088027800 nid=0x3a1f waiting on condition [0x00007f60fcd03000]java.lang.Thread.State...

weixin_36314117的博客 1064
上一篇: (6)并发编程高级篇-CopyOnWriteArrayList
下一篇: ReentrantLock入门级
yi博说
博客等级 码龄11年 20粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值