JUC:park/unpark的用法与原理

park / unpark

用法

// 暂停当前线程
LockSupport.park(); 
// 恢复某个线程的运行
LockSupport.unpark(暂停线程对象)

**先说结论:**无论unpark在park前还是后,都可以解除暂停状态。

先park在unpark可以成功运行:

        Thread t1 = new Thread(() -> {log.debug("start...");sleep(1);log.debug("park...");LockSupport.park();log.debug("resume...");},"t1");t1.start();sleep(2);log.debug("unpark...");LockSupport.unpark(t1);

在这里插入图片描述

先unpark再park也可以成功运行:

        Thread t1 = new Thread(() -> {log.debug("start...");try {sleep(2);} catch (InterruptedException e) {e.printStackTrace();}log.debug("park...");LockSupport.park();log.debug("resume...");},"t1");t1.start();sleep(1);log.debug("unpark...");LockSupport.unpark(t1);

在这里插入图片描述

与wait/notify区别

特点 与 Object 的 wait & notify 相比

  • wait,notify 和 notifyAll 必须配合 Object Monitor 一起使用(也就是先获取对象的锁),而 park,unpark 不必。
  • park & unpark 是以线程为单位来【阻塞】和【唤醒(指定)】线程,而 notify 只能随机唤醒一个等待线程,notifyAll是唤醒所有等待线程,就不那么【精确】。
  • park & unpark 可以先 unpark,而 wait & notify 不能先 notify。

在这里插入图片描述

如果先unpark,在park之前,counter会先+1,把unpark存储,等park的时候再使用。当然只能存储一次。

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

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

相关文章

全局UI方法-弹窗二-列表选择弹窗(ActionSheet)

1、描述 定义列表弹窗 2、接口 ActionSheet.show(value:{ title: string | Resource, message: string | Resource, autoCancel?: boolean, confrim?: {value: string | Resource, action: () > void }, cancel?: () > void, alignment?: DialogAlignment, …

顺序表专题

文章目录 目录1. 数据结构相关概念1.1 什么是数据结构1.2 为什么需要数据结构 2. 顺序表的概念及结构3. 顺序表分类4. 实现动态顺序表4.1 初始化4.2 顺序表的尾部插入4.3 打印顺序表4.4 顺序表的头部插入4.5 顺序表的尾部删除4.6 顺序表的头部删除4.7 指定位置之前插入数据4.8 …

词-词共现概率与Transformer

1.词词共现概率 词-词共现概率是自然语言处理中的一个关键概念,它描述的是在一段文本或一个大型语料库中,任意两个词在同一上下文中共同出现的概率。具体来说,如果我们在分析语料库时发现词A和词B经常相邻出现或者在一定距离范围内出现&#…

ajax, axios, 同步和异步

Ajax和同步与异步 今日目标: 1.利用原生ajax发送get和post请求 2.利用axios发送get和post请求 3.同步和异步 01-Ajax概述【了解】 概念: async javascript and xml: 异步的js和xml优点: 无刷新提交数据,用户体验好缺点&…

kafka学习笔记02(小滴课堂)

Kafka命令行生产者发送消息和消费者消费消息实战 已存在的kafka不能重复创建。 broker设置的是1,factor大于broker了,所以报错。 生产者发送消息: kafka列表出现了新的kafka。 我们使用这个kafka。 我们启动消费者: 我们现在不从…

PYTHON调离线语音合成并实时播放

1、资源下载(可以去讯飞官网控制台下载) 2、实现代码 # Python调普通离线合成并实时播放 import wave from ctypes import * import pyaudio""" 1、 在Python中某些时候需要C做效率上的补充,Python中的ctypes模块可以很方便…

csv文件转换成list 代码

hb [] h open("your_file.csv","r",encoding "utf-8") data h.read() #print(type(data)) rows data.split("\n") # 数据切分,以换行(“\n”)为基准,形成一个list,每一行…

【Qt 学习笔记】Day1 | Qt 背景介绍

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Day1 | Qt 背景介绍 文章编号:Qt 学习笔记 / 01 文章目录…

C/C++语言实现简易通讯录 [含文件操作,循环双链表]

文章目录 C/C语言实现简易通讯录概要基本功能运行截图展示主要代码展示 🎖 博主的CSDN主页:Ryan.Alaskan Malamute 📜 博主的代码仓库主页 [ Gitee ]:ryanala [GitHub]: Ryan-Ala C/C语言实现简易通讯录 ⚠⚠⚠ …

话题通信的python实现

一、发布者Publisher的python实现 step1:在scripts文件夹中创建py节点 step2:第一行是为了指定解释器,Ubuntu20.04是python3,比他低的版本是python。第二行是为了指定编码方式。第五行中,引用index.ros.org中数据类型…

RVM安装ruby笔记

环境 硬件:Macbook Pro 系统:macOS 14.1 安装公钥 通过gpg安装公钥失败,报错如下: 换了几个公钥地址(hkp://subkeys.pgp.net,hkp://keys.gnupg.net,hkp://pgp.mit.edu),…

论文笔记:Retrieval-Augmented Generation forAI-Generated Content: A Survey

北大202402的RAG综述 1 intro 1.1 AICG 近年来,人们对人工智能生成内容(AIGC)的兴趣激增。各种内容生成工具已经精心设计,用于生产各种模态下的多样化对象 文本&代码:大型语言模型(LLM)…

MySQL分表后,如何做分页查询?

参考: https://blog.csdn.net/qq_44732146/article/details/127616258 user.sql 完整的执行一遍,可以做到分表和分页 数据是实时的,往一张子表里插入之后,all表就能立刻查询到 在这里实现分页查询的是MyIsam引擎,这个引擎不支持…

Java:链表

一、链表简介 1、链表与顺序表的区别 上一篇博客我介绍了顺序表,这次我们来认识认识链表!先来看看二者的区别: 顺序表:由于顺序表实际上是一个数组,因此它在物理上是连续的,逻辑上也是连续的! …

HJ5 进制转换

目录 问题描述 输入描述: 输出描述: 示例 解释 思路 代码实现 问题描述 写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。 输入描述: 输入一个十六进制的数值字符串 输出描述: 输出该数…

【IDEA】使用debug方式去运行java程序

什么是debug工具? 调试工具(debug工具)是一种用于帮助程序员识别和修复程序中的错误的工具。它们提供了一系列的功能,帮助程序员在代码执行的过程中跟踪和检测问题,例如查看变量的值、检查函数的调用栈、设置断点来停…

Spring学习——什么是循环依赖及其解决方式

文章目录 前言一、什么是循环依赖二、解决思路1、循环依赖分类2、对象初始化步骤及对象分类3、spring是如何解决的4、图解5、三级缓存1、区别2、ObjectFactory是什么 三、源码debug1、spring创建对象过程1、dubug第一步——找到getBean2、dubug第二步——getBean与doGetBean3、…

腾讯 tendis 替代 redis linux安装使用

下载地址 Tendis存储版 点击下载 linux 解压 tar -zxvf 安装包.tgz cd 解压安装包/scripts 启动 ./start.sh 停止 ./stop.sh 详细配置 修改 /scripts tendisplus.conf # tendisplus configuration for testing # 绑定本机IIP bind 192.168.31.112 port 51002 #设…

MySQL的安装配置 及 MySQL配置,服务管理,基本使用,性能优化,安全性,监控与日志管理,扩展与高可用,备份与恢复,版本升级与迁移注意事项

MySQL的安装配置可以分为几个主要步骤,包括安装MySQL、验证安装是否成功、配置环境变量以及进行MySQL的配置。以下是详细的教程: 一、安装MySQL 首先,从MySQL官网下载MySQL安装包。进入官网后,找到“DOWNLOADS”部分&#xff0c…

海格里斯助推实体制造业转型升级 “算法定义硬件”解题AIoT市场

随着自动化的发展,电子商务和智能制造推动了自动化立体仓库的快速发展与创新,产生了“密集仓储”的概念。对于一个实体企业来讲,其数智物流转型正在趋向于“去伪存真”,企业追求高ROI与真实经济价值,具有降本增效的业务…