ParkUnpark

news2024/11/17 5:48:38

Park&Unpark

文章目录

  • Park&Unpark
    • Park&Unpark基本使用
      • 特点
    • park&unpark原理

Park&Unpark基本使用

它们是 LockSupport 类中的方法

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

先 park 再 unpark

@Slf4j(topic = "c.TestParkUnpark")
public class TestParkUnpark {
    public static void main(String[] args) {
        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);
    }
}

输出

11:10:52.737 c.TestParkUnpark [t1] - start...
11:10:53.751 c.TestParkUnpark [t1] - park...
11:10:54.738 c.TestParkUnpark [main] - unpark...
11:10:54.738 c.TestParkUnpark [t1] - resume...

这里park的状态其实就是wait的状态

先 unpark 再 park

@Slf4j(topic = "c.TestParkUnpark")
public class TestParkUnpark {
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            log.debug("start...");
            sleep(2);
            log.debug("park...");
            LockSupport.park();
            log.debug("resume...");
        }, "t1");
        t1.start();

        sleep(1);
        log.debug("unpark...");
        LockSupport.unpark(t1);
    }
}

输出

18:43:50.765 c.TestParkUnpark [t1] - start... 
18:43:51.764 c.TestParkUnpark [main] - unpark... 
18:43:52.769 c.TestParkUnpark [t1] - park... 
18:43:52.769 c.TestParkUnpark [t1] - resume... 

unpark既可以在park之前调用,也可以在park之后调用。

特点

与 Object 的 wait & notify 相比

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

park&unpark原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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

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

相关文章

软考之零碎片段记录(二十七)+复习巩固(十三、十四)

学习 1. 案例题 涉及到更新的。肯能会是数据流的终点E, P, D 数据流转。可能是 P->EP->D(数据更新)P->P(信息处理)D->P(提取数据信息) 2. 案例2 补充关系图时会提示不增加新的实体。则增加关联关系 3. 案例3 用例图 extend用于拓展,当一个用例…

2024最新AIBotPro开源码AI Web 应用支持GPT-4全模型

2024最新AIBotPro开源码AI Web 应用支持GPT-4全模型, 支持AI绘画/插件联网/自定义插件/AI知识库等等。 内有详细的图文搭建教程

小龙虾优化算法(Crayfish Optimization Algorithm,COA)

小龙虾优化算法(Crayfish Optimization Algorithm,COA) 前言一、小龙虾优化算法的实现1.初始化阶段2.定义温度和小龙虾的觅食量3.避暑阶段(探索阶段)4.竞争阶段(开发阶段)5.觅食阶段&#xff08…

进程地址空间 【Linux】

文章目录 进程地址空间 进程地址空间 进程地址空间,本质是一个描述进程可视范围的大小, 地址空间内一定要存在各种区域划分,对线性地址进行start,和end即可 在每一个区的_start 到_end 范围内,这段连续的空间中&…

Swift - Playground

文章目录 Swift - Playground1. 新建Playground2. View3. 图片4. ViewController5. Playground - 多Page6. 注释6.1 Playground的注释支持markup语法(与markdown相似)6.1.1 语法 Swift - Playground Playground可以快速预览代码效果,是学习语…

前端计算机网络之网络模型

什么是网络模型 对于前端开发者而言,理解网络模型的概念是非常重要的。网络模型是描述数据如何在网络中传输和处理的框架和规则,它有助于前端开发者更好地理解和优化应用程序与服务器之间的通信过程。 常用的两类模型 前端开发者需要了解的网络模型主…

引入线程的贪吃蛇风骚走位

1.在main函数中分别引入线程t1 和线程 t2 一个线程用来刷新界面,一个线程用来改变方向 2.刷新界面函数,无限次刷新 3. 也是无限循环while(1) 定义key 从键盘获取输入方向,赋值给dir; 4.在初始化函数中确定蛇向有行走为方向 5.从改变方向的函数…

c++中的链表list的模拟实现

拖更了半个月,我终于来填c的坑啦。上次我们说的vetcor不知道小伙伴还记得多少呢?今天我们要讲list的模拟实现。 目录 架构结点list表的结构 构造函数尾插push_back()尾删pop_back()计算个数:size()判断空empty()※迭代器问题普通迭代器迭代器…

16. Spring 事务和事务传播机制

源码位置:transaction 1. 事务回顾 在数据库阶段,想必大家都已经学习过事务了。当多个操作要么一起成功,要么一起失败的时候就需要将多个操作放在同一个事务中。 举个例子:比如用户A给用户B转账100元的业务,需要把用…

英文文档阅读学习atoi

文档链接:atoi - C Reference (cplusplus.com) 如果可以看的懂英文的可以直接看这个图,看不明白也没关系,可以看一下下面的翻译: 这是一些c语言的相关单词意思: C-string——使用空字符 0 结尾的一维字符数组 as in i…

(学习日记)2024.04.28:UCOSIII第五十二节:User文件夹函数概览(uC-LIB文件夹)第二部分

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

重学java 24.面向对象 多态

下雨了,跑不跑衣服都会被淋湿,还不如慢慢地走,结局已定 —— 24.4.25 多态 1.面向对象三大特性:封装 继承 多态 2.怎么学: a、不要从字面意思上理解多态这两个字,要从使用形式上掌握 b、要知…

【Redis 开发】Redis哨兵

哨兵 作用和原理服务状态监控选举新的master 搭建哨兵集群RedisTemplate的哨兵模式 作用和原理 Redis提供了哨兵机制来实现主从集群中的自动故障恢复: 哨兵也是一个集群 监控:会不断检查master和slave是否按预期工作自动故障恢复:如果mast…

开发工具-pycharm的代码自动部署服务器以及服务端python配置、项目开发环境一键启动服务

文章目录 一、pycharm的ssh配置1.本地生成ssh密钥2.密钥配置到远端服务器(1-1) 有权限ssh访问到服务器(1-2) 无权限ssh访问到服务器(1-3) 没有办法通过以上形式上传到服务器(2) 配置到authorized_keys自动访问 3.pycharm中配置ssh(1) 选择File中的settings(1) 选择Tools中的SSH…

Github创建远程仓库(项目)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

StarBright染料--星光高亮抗体 助力多色方案

星光染料是一种独特的荧光纳米粒子,将它与 Bio-Rad 高度验证的抗体结合,专为流式细胞术开发,为您提供卓越染色效果。星光染料使稀有群体和低密度抗原易于分辨,同时保持适用于任何多色实验的灵活性。 本篇将帮助你了解高亮星光染料…

springboot权限验证学习-下

上篇讲了rbac对于菜单的权限,下面准备完成按钮权限以及行数据和列数据权限 权限控制(按钮权限) 权限控制 操作权限就是将操作视为资源,比如删除操作,有些人可以有些人不行。于后端来说,操作就是一个接口。于前端来说&#xff0…

vue2使用change事件监听不了回车事件的问题

在 vue2 项目中使用 el-input 的 change 监听&#xff0c;数据不发生变化时&#xff0c;回车事件和失去焦点不生效 输入框会一直显示 只有数据发生变化时才生效 <el-input v-model"editedText" change"endEditing" ref"input"></el-inp…

校园广播系统:智能化管理提升校园安全与效率

在现代教育环境中&#xff0c;校园广播系统不再仅仅是一个播放音乐和通知的工具&#xff0c;它已经成为学校基础设施中不可或缺的一部分。根据《义务教育阶段学校信息化设备配备标准》的第8条&#xff0c;校园广播系统在学校范围内的日常运用极为广泛&#xff0c;涵盖了升旗仪式…

基于 SpringCloud 的在线交易平台乐优商城的设计与实现(四)

第 4 章 数据库设计 4.1 数据库设计原则 4.2.数据库概念结构设计 4.3 数据库表设计 4.4.本章小结 前面内容请移步 基于 SpringCloud 的在线交易平台乐优商城的设计与实现&#xff08;三&#xff09; 相关免费源码资源 乐优商城 第 4 章 数据库设计 4.1 数据库设计原…