java帐篷_Java多线程之 Park和Unpark(十四)

介绍

Park 和 Unpark 均是 LockSupport 类中的方法

//暂停当前线程

LockSupport.park();

//恢复某个线程

LockSupport.unpark(暂停线程对象);

先 park 再unpark

Thread thread = new Thread(() -> {

System.out.println("start.....");

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println("park....");

LockSupport.park();

System.out.println("resume.....");

});

thread.start();

Thread.sleep(2000);

System.out.println("unpark....");

LockSupport.unpark(thread);

运行结果

Connected to the target VM, address: '127.0.0.1:2352', transport: 'socket'

start.....

park....

unpark....

resume.....

注意:

park 中的线程,处于 WAIT 状态

unpark 既可以在 park 之前调用或之后调用,都是用来恢复某个线程的运行,简单的说,调用 unpark 后再调用 park 线程依然不会暂停,类似提前“解毒”。

特点

与 Object 的 wait & notify 相比

wait,notify 和 notifyAll 必须配合 Object Monitor 一起使用,而 unpark 不必

park & unpark 是以线程为单位来【阻塞】和【唤醒】线程,而 notify 只能随机唤醒一个等待线程,notifyAll 是唤醒所以等待线程,就不那么【精确】

park & unpark 可以先 unpark ,而 wait & notify 不能先 notify

原理

每个线程都有自己的一个 Parker 对象(C 实现的),由三部分组成 _counter, _cond, 和 _mutex

举个例子,把线程比喻成一个旅行者, Parker 就是他背着的旅行包,条件变量(_cond) 好比背包中帐篷。_counter 好比背包中的备用干粮( 0 为耗尽, 1 为充足)

调用 park 就是看线程需不需要停下来休息

若备用干粮耗尽( _counter 为 0) ,则钻进帐篷休息(线程暂停)

若备用干粮充足(_counter 为 1),则不需要停留继续前进 (线程继续运行)

调用 unpark ,相当于补充干粮(把 _counter 设置为 1)

如果此时线程 还在帐篷(先调用 park) ,则唤醒他继续前进(线程继续运行)

如果线程还在运行,下次调用 park 时,仅是消耗备用干粮(把 _counter 设置为 0) ,不需要停留继续前进。

如果此时线程还在运行,那么下次他(线程)调用park时,仅是消耗备用干粮,不需要停留继续前进

因为背包空间有限,多次调用 unpark 仅会补充一份备用干粮

详细

1)调用 park

当前线程调用 park() 方法

检查_counter,本情况为 0 此时获得 _mutex 互斥锁

线程进入 _cond 条件变量阻塞

设置 _counter = 0

2)调用 unpark

调用 unpark(Thread_0)方法,设置 _counter 为 1

唤醒 _cond 条件变量中的 Thread_0 (线程)

Thread_0 恢复运行

设置 _counter 为 0

3)先调用 unpark 再调用 park

调用 unpark (Thread_0) 方法,设置_counter 为 1

当前线程调用 park() 方法

检查 _counter ,本情况为 1 ,这时线程无需阻塞,继续运行

设置 _counter 为 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512164.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

建立数字化、学习型人事平台,HR 与业务终于不再「隔空对话」

本篇文章暨 CSDN《中国 101 计划》系列数字化转型场景之一。 《中国 101 计划——探索企业数字化发展新生态》为 CSDN 联合《新程序员》、GitCode.net 开源代码仓共同策划推出的系列活动,寻访一百零一个数字化转型场景,聚合呈现并开通评选通道&#xff…

OpenYurt 深度解读|开启边缘设备的云原生管理能力

简介: 北京时间 9 月 27 号,OpenYurt 发布 v0.5.0 版本。新发布版本中首次提出 kubernetes-native非侵入、可扩展的边缘设备管理标准,使 Kubernetes 业务负载模型和 IOT 设备管理模型无缝融合。 作者|贾燚星(VMware), 何淋波(阿里…

Cloudera Manager 术语和架构

简介: 本文介绍了Cloudera Manager 的常见术语和架构 Cloudera Manager 术语 为了有效地使用Cloudera Manager,您应该首先了解其术语。 术语之间的关系如下所示,其定义如下: 有时,术语服务和角色用于同时指代类型和…

冬奥网络安全卫士被表彰突出贡献,探寻冬奥背后的安全竞技

奥运史上首次公开招募白帽子担任“冬奥网络安全卫士”。 据统计,从冬奥会开始到冬残奥会闭幕式结束,奇安信共检测日志数量累积超1850亿,日均检测日志超37亿,累计发现修复漏洞约5800个,发现恶意样本54个,排查…

打破 Serverless 落地边界,阿里云 SAE 发布 5 大新特性

简介: SAE 的 5 大新特性、4 大最佳实践,打破了 Serverless 落地的边界,让 All on Serverless 成为可能. 微服务场景,开源自建真的最快最省最稳的?复杂性真的会成为 Kubernetes 的“致命伤”吗?企业应用容…

java线程一定是thread_深入理解Java多线程(multiThread)

多线程的基本概念一个java程序启动后,默认只有一个主线程(Main Thread)。如果我们要使用主线程同时执行某一件事,那么该怎么操作呢?例如,在一个窗口中,同时画两排圆,一排在10像素的高度,一排在5…

技术解读|云上企业级存储——打开存储新维度,促进用户核心业务创新

简介: 将企业级存储和云的特点进行完美的融合是云上企业级存储的目标,它打开存储更多新的维度,在保障用户业务永续的同时,帮助用户更好的进行业务创新。本文属ESSD技术解读的总篇,总体介绍ESSD 云盘创新融合了云和企业…

金蝶发布2021年财报:云业务同比增44.2%,继续加码研发技术创新

编辑 | 宋慧 出品 | CSDN云计算 金蝶国际软件集团有限公司(“金蝶国际”、“金蝶”或“公司”,连同其附属公司统称“集团”;股份编号:0268.HK)今日公布其截至2021年12月31日止十二个月(“报告期”&#xf…

分布式系统一致性测试框架Jepsen在女娲的实践应用

简介: 女娲团队在过去大半年时间里持续投入女娲2.0研发,将一致性引擎和业务状态机解耦,一致性引擎可支持Paxos、Raft、EPaxos等多种一致性协议,根据业务需求支撑不同的业务状态机。其中的一致性引擎模块是关键,研发一致…

java编写p_如何编写可怕的Java代码?

我决定告诉你如何编写可怕的Java代码。如果你厌倦了所有这些美丽的设计模式和最佳实践,并且想写些疯狂的东西,请继续阅读。如果你正在寻找有关如何编写良好代码的建议,请查看其它文章!1|0对一切使用异常你知道循环对吗&#xff1f…

“预习-上课-复习”:达摩院类人学习新范式探索

简介: 预习时关注重点,上课时由易到难,复习时举一反三,能否让机器也按照“预习-上课-复习”的学习范式进行学习呢? 达摩院对话智能(Conversational AI)团队对这个问题进行了研究探索&#xff0c…

西门子Mendix发低代码最新报告趋势:客户体验先行、智能化和全渠道化

88%的受访者将提供高质量的客户体验(CX)作为一项重要目标,38%的受访者期望通过实现这一目标来增长收入 90%的受访者因 “数据孤岛” 问题和技术过时等原因无法顺利提供数字化客户体验 近一半的受访者希望改善他们在移动端的体验,这…

云上虚拟IDC(私有池)如何为客户业务的确定性、连续性保驾护航

简介: 企业业务上云后,还面临特定可用区购买云上特定计算产品实例失败的困境?云上私有池pick一下 Why 云上业务为什么需要资源确定性、服务连续性 云计算正朝着像水电煤一样的基础设施演进,支持用户按需使用、按量付费。目前&am…

Gartner发布2022年七大安全和风险管理趋势

编辑 | 宋慧 出品 | CSDN云计算 Gartner表示,安全和风险管理领导者必须应对七大趋势,才能保护现代企业机构不断扩张的数字足迹免受2022年及以后新威胁的影响。 Gartner研究副总裁Peter Firstbrook表示:“全球企业机构正面临着复杂的勒索软件…

java中img属性_如果html img的src属性无效,请输入默认图像?

回答(19)2 years ago你问过一个只有HTML的解决方案....../p>"http://www.w3.org/TR/html4/strict.dtd">Object Test由于第一个图像没有使用不支持object的旧浏览器,因此它将忽略该标记并使用 img 标记 . 有关兼容性,请参见caniuse网站 .…

阿里云日志服务SLS,打造云原生时代智能运维

2021年10月21日,阿里云针对企业运维难题,在云栖大会为大家带来了一场《智能运维论坛》的主题演讲。在会上,阿里云资深技术专家、日志服务技术负责人简志提出“云原生时代,企业业务数字化是对工程师们严峻的挑战。作为运维工程师&a…

实践分享丨企业上云后资源容量如何规划和实施

简介: 企业上云后,云上的预算直接影响上云的优先级、进度、深度。预算投入的多少,与业务发展和资源需求的容量评估紧密相关。精准的容量评估,可以使企业上云的预算规划更科学,同时也更贴合业务发展阶段的需要。本文分享…

如果让你来设计网络

作者 | 闪客sun 来源 | 低并发编程 你是一台电脑,你的名字叫 A 很久很久之前,你不与任何其他电脑相连接,孤苦伶仃。 直到有一天,你希望与另一台电脑 B 建立通信,于是你们各开了一个网口,用一根网线连接了起…

【ESSD技术解读-01】 云原生时代,阿里云 ESSD 快照服务 助力企业级数据保护

简介:本文以云原生为时代背景,介绍了阿里云块存储快照服务如何基于高性能 ESSD 云盘提升快照服务性能,提供轻量、实时的用户体验及揭秘背后的技术原理。依据行业发展及云上数据保护场景,为企业用户及备份厂商提供基于快照高级特性…

java字节码文件加密_java 字节码加密源码

java 字节码加密源码java2021-2-16下载地址https://www.codedown123.com/73152.htmljava 字节码加密源码,实现对class加密解密资源下载此资源下载价格为2D币,请先登录资源文件列表JvmitPrj/Common.h , 703JvmitPrj/Debug/cl.command.1.tlog , 1870JvmitPrj/Debug/CL…