LockSupport是什么

news/2025/10/13 11:57:32/文章来源:https://www.cnblogs.com/LuckCodeLog/p/19138124

 LockSupport是什么

 

 LockSupport让线程等待和唤醒的方法和Object类中的区别:

 

  • 方式一:使用Object中的wait()方法让线程等待,使用Object中的notify()方法唤醒线程
  • 方式二:LockSupport类可以阻塞当前线程以及唤醒指定被阻塞的线程

 

 

方式一Object类中的wait和notify方法实现线程等待和唤醒:

监视器锁(synchronized)基于锁对象头(objectLock)中的 Mark Word 和操作系统的管程 (Monitor)
实现,通过锁对象的等待队列来管理线程状态

  • wait和notify方法必须要在同步代码块或者方法里面,且成对出现使用
  • 先wait再notify才ok

/**
 * @author Guanghao Wei
 * @create 2023-04-11 12:13
 */
public class LockSupportDemo {

    public static void main(String[] args) {
        Object objectLock = new Object();
        /**
         * t1     -----------come in
         * t2     -----------发出通知
         * t1     -------被唤醒
         */
        new Thread(() -> {
            synchronized (objectLock) {
               
System.out.println(Thread.currentThread().getName() + "\t -----------come
in");
                try {
                   
objectLock.wait();
                } catch
(InterruptedException e) {
                   
e.printStackTrace();
                }
               
System.out.println(Thread.currentThread().getName() + "\t -------被唤醒");
            }
        }, "t1").start();

        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        new Thread(() -> {
            synchronized (objectLock) {
                objectLock.notify();
               
System.out.println(Thread.currentThread().getName() + "\t
-----------发出通知");
            }

        }, "t2").start();
    }
}

 

上述对象Object使用的限制条件:

  • 线程需要先获得并持有锁,必须在锁块(synchronized或lock)中
  • 必须要先等待后唤醒,线程才能够被唤醒    

 

 

 方式二LockSupport类中的park等待和unpark唤醒:

  • 是什么
  •  

    • LockSupport类使用了一种名为Permit(许可)的概念来做到阻塞和唤醒线程的功能,每个线程都有一个许可(Permit),许可证只能有一个,累加上限是1。
  • 主要方法
  •  

    • 阻塞:
      Peimit许可证默认没有不能放行,所以一开始调用park()方法当前线程会阻塞,直到别的线程给当前线程发放peimit,park方法才会被唤醒。
  •  

    •  

      • park/park(Object blocker)-------阻塞当前线程/阻塞传入的具体线程
  •  

    • 唤醒: 调用unpack(thread)方法后
      就会将thread线程的许可证peimit发放,会自动唤醒park线程,即之前阻塞中的LockSupport.park()方法会立即返回。
  •  

    •  

      • unpark(Thread thread)------唤醒处于阻塞状态的指定线程

/**
 * @author Guanghao Wei
 * @create 2023-04-11 12:13
 */
public class LockSupportDemo {

    public static void main(String[] args) {
        /**
         * t1     -----------come in
         * t2     ----------发出通知
         * t1     ----------被唤醒
         */
        Thread t1 = new Thread(() -> {
           
System.out.println(Thread.currentThread().getName() + "\t -----------come
in");
            LockSupport.park();
           
System.out.println(Thread.currentThread().getName() + "\t ----------被唤醒");
        }, "t1");
        t1.start();

        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        new Thread(() -> {
            LockSupport.unpark(t1);
           
System.out.println(Thread.currentThread().getName() + "\t
----------发出通知");
        }, "t2").start();

    }
}
 

  • 重点说明(重要)
  •  

    • LockSupport是用来创建锁和其他同步类的基本线程阻塞原语 
      ,所有的方法都是静态方法,可以让线程再任意位置阻塞,阻塞后也有对应的唤醒方法。归根结底,LockSupport时调用Unsafe中的native代码
    • LockSupport提供park()和unpark()方法实现阻塞线程和解除线程阻塞的过程
      ,LockSupport和每个使用它的线程都有一个许可(Peimit)关联,每个线程都有一个相关的permit,peimit最多只有一个,重复调用unpark也不会积累凭证。
    • 形象理解:线程阻塞需要消耗凭证(Permit),这个凭证最多只有一个
  •  

    •  

      • 当调用park时,如果有凭证,则会直接消耗掉这个凭证然后正常退出。如果没有凭证,则必须阻塞等待凭证可用;
      • 当调用unpark时,它会增加一个凭证,但凭证最多只能有1各,累加无效,所以多次 LockSupport.unpark(t1);

 

 

总结:

LockSupport中的unpark是通过给线程加一个原子通行证属性来判断线程有无使用;而使用锁,是依靠锁监视器对象来协调各个线程以及阻塞线程,包括锁对象的线程等待队列来管理线程状态

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

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

相关文章

(26)ASP.NET Core2.2 EF保存(基本保存、保存相关数据、级联删除、启用事务)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025 年国内脱硫剂生产厂家最新推荐排行榜:氧化铁 / 羟基氧化铁 / 常温氧化铁 / 沼气等多类型产品优质企业全方位解析

引言当前工业领域对气体脱硫需求日益严苛,天然气、沼气、甲醇等行业在生产中,需依赖高性能脱硫剂保障安全与环保。但市场上脱硫剂厂家繁杂,部分企业存在工艺落后、质量不稳定、售后缺失等问题,让采购企业难以抉择。…

护花使者

这晚在街中偶遇心中的她 两脚决定不听使唤跟她归家 深宵的冷风 不准吹去她 她那幽幽眼神快要对我说话 纤纤身影 飘飘身影 默默转来吧 对我说浪漫情人爱我吗 贪心的晚风 竟敢拥吻她 将她秀发温温柔柔每缕每缕放下 卑污的…

实用指南:Kafka 合格候选主副本(ELR)在严格 min ISR 约束下提升选主韧性

实用指南:Kafka 合格候选主副本(ELR)在严格 min ISR 约束下提升选主韧性pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-famil…

2025年10月石头纸设备定做厂家最新推荐榜单:诚信专业,品质卓越之选!

2025年10月石头纸设备定做厂家最新推荐榜单:诚信专业,品质卓越之选!随着环保意识的提升和科技的进步,石头纸作为一种新型环保材料,逐渐受到市场的青睐。石头纸设备作为生产这种材料的关键工具,其质量和性能直接影…

H5移动端图片查看器

一、新建名为ImageViewer.vue的组件,代码如下: <!-- ImageViewer.vue --> <template><div class="fullscreen-viewer" v-if="visible" @click="closeViewer"><d…

2025年10月复合钢丝网厂家最新推荐排行榜,镀锌复合钢丝网,不锈钢复合钢丝网,建筑用复合钢丝网公司推荐!

2025年10月复合钢丝网厂家最新推荐排行榜:镀锌、不锈钢及建筑用复合钢丝网公司推荐随着工业和建筑业的快速发展,复合钢丝网在多个领域的应用越来越广泛。无论是用于建筑加固、防护围栏还是其他用途,选择一家优质的复…

typora无需激活版及最新激活版方法!双击安装就能用

软件介绍 Typora 是一款Markdown编辑器,支持实时预览,所见即所得。跨平台,支持Windows、macOS、Linux。适合写作、笔记、技术文档等。本教程将提供‌合法安全‌的安装方案,并解决常见问题,助你高效完成部署!直接…

类和对象(二) - 实践

类和对象(二) - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &quo…

2025 年国内风化板源头厂家最新推荐排行榜:聚焦优质原料与精湛工艺,助力消费者精准选购靠谱企业榜单吧台/松木/桌面/茶台风化板厂家推荐

引言当前风化板市场需求持续增长,但行业乱象也让消费者选购时倍感困扰。一方面,大量厂家涌入导致产品质量参差不齐,部分企业为压缩成本使用劣质木材,使风化板易出现变形、开裂问题,严重影响使用体验;另一方面,市…

20232312 2025-2026-1 《网络与系统攻防技术》实验一实验报告

20232312 2025-2026-1 《网络与系统攻防技术》实验一实验报告20232312 2025-2026-1 《网络与系统攻防技术》实验一实验报告 1.实验内容 1.1通过学习、分析可执行文件pwn1,学习了三种漏洞利用技术:​​直接修改程序机…

2025年10月方钢厂家最新推荐排行榜,热轧方钢,冷拉方钢,高强度方钢,优质方钢供应商推荐!

2025年10月方钢厂家最新推荐排行榜:热轧方钢、冷拉方钢、高强度方钢、优质方钢供应商推荐随着工业和建筑业的快速发展,方钢作为重要的建筑材料之一,其需求量持续增长。为了帮助筛选方钢品牌,特此发布权威推荐榜单,…

OpenBLAS blas_thread_init: pthread_create failed for thread 1 of 4: Operation not permitted

https://blog.csdn.net/qq_45237725/article/details/148383599 (加权限)无可奈何花落去,似曾相识燕归来

QPSK调制在瑞利、高斯和莱斯信道下的MATLAB仿真

QPSK调制在不同信道条件下性能仿真的MATLAB实现 %% QPSK在瑞利、高斯和莱斯信道下的仿真 clear; close all; clc;%% 仿真参数设置 numBits = 1e6; % 传输的比特数 SNR_dB = 0:2:20; % 信噪比范…

Delapp文件删除工具!Windows中删除文件和文件夹的简单工具!仅507KB的工具小巧且方便

有的时候我们删文件总是遇到无法删除,提示文件在另一程序打开,但是又没有打开,怎么删也删不掉, ​​ 软件介绍 Delapp 是一款开源免费的Windows文件删除工具,免安装、小巧、速度快、支持win7……帮你解除占用,爽…

在 2023 年屌爆了一整年的 shadcn/ui 用的 Headless UI 到底是何方神圣?

在 2023 年屌爆了一整年的 shadcn/ui 用的 Headless UI 到底是何方神圣? 2024-03-1113,974阅读8分钟 专栏: Headless UI 无头组件的介绍与实现 作者:易师傅 、github 声明:本文为稀土掘金技术社区首发签约文章…

基于Hadoop+Spark的商店购物趋势分析与可视化平台科技达成

基于Hadoop+Spark的商店购物趋势分析与可视化平台科技达成pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

2025 年折弯厂家推荐:江阴市富磊钢板加工专业中厚钢板折弯加工与高效行业解决方案提供商

行业背景随着船舶设备、港口重工、换热设备、环保设备等重工行业的快速发展,市场对中厚钢板折弯加工的需求日益提升,尤其是超厚、超长、大吨位的钢板折弯加工需求,对加工企业的技术实力、设备配置和产能规模提出了更…

2025年10月振动电机厂家最新推荐排行榜,三相振动电机,单相振动电机,防爆振动电机公司推荐!

2025年10月振动电机厂家最新推荐排行榜:三相、单相及防爆振动电机公司推荐随着工业自动化和智能化的不断发展,振动电机在各个行业的应用越来越广泛。从矿山、冶金到食品加工、化工等领域,振动电机都发挥着重要作用。…

2025 储能 EMS 厂商排名:五大品牌以全维度优势领跑,技术与规模双驱动企业凸显

在新型电力系统建设加速推进的背景下,储能 EMS 作为储能电站的 “大脑”,其厂商的综合实力直接决定系统运行效率与价值实现。2025 年市场竞争已从场景适配转向全维度实力比拼,资质认证的完备性、核心技术的突破性、…