JAVA多线程进阶篇 9、JUC工具类之LockSupport

Java多线程:JUC包-锁的封装 之前在Java多线程:synchronized和volatile这篇文章中,讲了Java在语言层面上对对多线程提供的支持。那么,在实际应用中,很多时候仅仅靠这两个关键字是不够的。那么如果我们想进行更骚的操作,就需要使用 java.util.concurrent 包下的工具类了。这个包的结构如下所示: - java.util - atomic //原子操作 - locks /... 阅读详情


LockSupport 实现了线程A控制线程B的阻塞与唤醒。

  • 如果要实现线程阻塞,一般需要使用锁对象,LockSupport不需要锁可以直接阻塞住线程。
  • 如果要实现线程唤醒,以前都是notify或者notifyall方法,但是这样会把锁对象上的所有线程都唤醒,无法精准控制换醒哪个线程。LockSupport可以实现精准唤醒。

1. LockSupport 的使用示例

public class LockSupportTest {
    public static void main(String[] args) {
        Thread t = new Thread(()->{
            for(int i=0;i<100;i++) {
                if(i%3==0) LockSupport.park();
                System.out.println("threat"+Thread.currentThread().getName()+" runs,i="+i+" ,date="+new Date());
            }
        });
        t.start();

        while (true) {
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            LockSupport.unpark(t);
        }
    }
}

运行结果,主线程每隔5秒都唤醒t线程,这样的控制方式相比之前太方便了。

LockSupport

总结

LockSupport 能够阻塞、唤醒一个线程,相比wait()、notify()等方法更直接。

多线程系列在github上有一个开源项目,主要是本系列博客的实验代码。

https://github.com/forestnlp/concurrentlab

如果您对软件开发、机器学习、深度学习有兴趣请关注本博客,将持续推出Java、软件架构、深度学习相关专栏。

您的支持是对我最大的鼓励。

Java多线程(14)——JUC——locks系列(1)——LockSupport使用以及源码分析 目录 1.概述 2.LockSupport的park-unpark与Object的wait-notitfy的对比 3.LockSupport的源码分析 3.1 成员变量 3.2 park方法 3.3 unpark方法 1.概述 当我要分析AQS,Condition的时候,发现它们当中都使用到了LockSupport,所以先在这里对LockSupport进行学习 LockSuppo... 阅读详情

相关推荐

JUC学习 - LockSupport工具类

一、JUC中的LockSupport工具类 LockSupport位于java.util.concurrent(简称juc)包中,算是juc中一个基础类,juc中很多地方都会使用LockSupport,非常重要!!! 关于线程等待/唤醒的方法,前面的我们已经讲过2种了: 方式1:使用Object中的wait()方法让线程等待,使用Object中的notify()方法唤醒线程 方式2:使用juc包中Condition的await()方法让线程等待,使用signal()方法唤醒线程 Object和Condit

TyuIn的博客 600

Java多线程 - LockSupport工具类

文章目录1. LockSupport的常用方法2. LockSupport.park()和Thread.sleep()的区别3. LockSupport.park()与Object.wait()的区别 LockSupport是JUC提供的一个线程阻塞与唤醒的工具类,该工具类可以让线程在任意位置阻塞和唤醒,其所有的方法都是静态方法。 1. LockSupport的常用方法 public class LockSupport { // 无限期阻塞线程 public static void park

你今天真好看呀 1208

LangChain Message 官方文档

消息是聊天模型中的基本通信单位。它们用于表示聊天模型的输入和输出,以及与对话相关的其他上下文或元数据。每条消息都包含一个角色(如“用户”、“助手”)和内容(如文本或多模态数据),并可能包含根据不同聊天模型提供商而有所不同的附加元数据。LangChain 提供了一个统一的消息格式,可以跨不同聊天模型使用,简化用户在不同模型之间切换时所需关注的消息格式差异。

AI Agent 首席体验官 896

Java中LockSupport的使用

一、基本使用 LockSupport是JDK1.6中在java.util.concurrent中的子包locks中引入的一个比较底层的工具类,用来创建锁和其他同步工具类的基本线程阻塞原语。java锁和同步器框架的核心 AQS: AbstractQueuedSynchronizer,就是通过调用 LockSupport .park()和 LockSupport .unpark()实现线程的阻塞和唤...

black_bird_cn的博客 2193

Triton推理服务器实战:如何为PaddleOCR的ONNX模型配置动态批处理和并发推理

本文详细介绍了如何使用Triton推理服务器为PaddleOCR的ONNX模型配置动态批处理和并发推理,以提升GPU利用率和推理性能。通过实战案例和参数调优指南,帮助开发者解决高并发场景下的性能瓶颈问题,实现从实验室到生产环境的高效部署。

weixin_42527160的博客 426

【Qt】使用QMediaPlayer播放视频

window平台可以安装K-Lite,linux平台一般各发行版都会默认安装GSteam。播放RTSP视频时,可以使用VLC播放器搭建一个视频推流服务器,用于拉流的客户端的调试。3、如果没有添加Qt环境变量,请把关联的Qt5MultimediaWidgets.dll和Qt5Multimedia.dll放到进程路径下否则也会报ServiceMissingError错误。2、需要安装解码器,否则报 ServiceMissingError 无法找到服务的错误。1、需要在.pro工程文件中引用对应模块。

奔涌的后浪的专栏 2219

Java的LockSupport.park()实现分析

LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了基本的线程同步原语。LockSupport实际上是调用了Unsafe类里的函数,归结到Unsafe里,只有两个函数: public native void unpark(Thread jthread); public native void park(boolean isAbsolute, long ti

横云断岭的专栏 5万+

高通平台Android稳定性调试笔记:手把手教你用T32、Crash Utility分析Kernel Panic与RAM Dump

本文详细介绍了高通平台Android内核崩溃的分析方法,包括使用T32 Simulator和Crash Utility工具链解析Kernel Panic与RAM Dump。从环境配置、dump文件预处理到高级调试技巧,手把手教你如何定位和解决Android系统崩溃问题,特别适用于MSM/SA8155平台的开发者。

weixin_42543046的博客 527

Java并发编程之LockSupport、Unsafe详解

简介在Java多线程中,当需要阻塞或者唤醒一个线程是,都会使用LockSupport工具类来完成相应的工作。LockSupport定义了一组公共静态方法,这些方法提供了最基本的线程阻塞和唤醒功能,而LockSupport也因此成为了构建同步组件的基础工具。LockSupport定义了一组以park开头的方法用来阻塞当前线程,以及unpark(Thread)方法来唤醒一个被阻塞的线程,这些方法描述如...

Stay Hungry, Stay Foolish 1万+

易灵思Ti60F100 FPGA的HyperRAM实战:从硬件连接到Native接口时序调试

本文详细介绍了易灵思Ti60F100 FPGA内置HyperRAM控制器的实战应用。文章从硬件设计要点(如400MHz+信号完整性、等长匹配)切入,重点解析了如何通过Interface Designer配置高效的Native接口,并分享了其时序详解与调试技巧,为开发者提供了一份从硬件连接到软件调试的深度指南。

weixin_29168153的博客 456

掌握RDMA核心:从同步构建到异步事件的连接艺术

本文深入解析RDMA编程中的双模式设计,揭示同步配置与异步事件机制的协作关系。第一部分阐述同步函数rdma_bind_addr和rdma_listen的本地化角色,强调它们仅完成本地端点配置。第二部分剖析异步事件模型,重点分析连接请求和建立事件的处理流程。通过完整生命周期序列图展示两种模式的交互过程,并提供错误处理、资源管理和性能调优的实用建议。文章指出,理解同步本地配置与异步网络响应这一责任划分,是掌握RDMA编程的关键所在。

数字人生 283

Java中的锁--LockSupport工具和Condition接口

六、LockSupport工具 LockSupport定义了一组以park开头的方法来阻塞当前线程,以及unpart(Thread thread)方法来唤醒线程。 在Java 6中,LockSupport增加了三个方法:用于替代原来的方法 part(Object blocker)、parkNanos(Object object,lon...

LinDongTian 559

26届数字IC秋招笔试面试全攻略-UVM验证方法学精要

本文介绍了数字IC验证中UVM方法学的核心内容,包括组件架构、Sequence机制和寄存器模型。UVM提供env、agent、driver等组件构建验证环境;Sequence机制通过item、sequence和sequencer实现激励生成与控制;寄存器模型则通过reg_block、reg等组件管理DUT寄存器。文章详细说明了各模块的功能、交互关系和代码实现,为IC验证工程师提供了完整的UVM应用指南,重点突出了验证环境的搭建方法、激励生成流程和寄存器抽象技术。这些内容是数字IC秋招笔试面试中的高频考点。

2301_79143213的博客 725

JUC工具类-LockSupport概述

​ 多线程并发场景中,时常需要线程协同,故而需要对当前线程进行阻塞,并唤醒需要协同的线程来一起完成任务。​ LockSupport来自于JDK1.5,位于JUC包的locks子包,是一个非常方便实用的线程阻塞工具类,它定义了一组的公共静态方法,这些方法提供了最基本的线程阻塞和唤醒功能,可以在线程内任意位置让线程阻塞、唤醒。​在AQS框架的源码中,当需要阻塞或唤醒一个线程的时候,都会使用LockSupport工具来完成。

qq_36010886的博客 364

游戏开发:逻辑与渲染分离技术解析

游戏开发中逻辑与渲染分离的架构设计 本文系统阐述了游戏开发中逻辑与渲染分离的设计原则与实践方法。文章首先定义了核心概念:逻辑层负责游戏规则与状态,渲染层处理视觉表现,二者通过数据模型层进行通信。通过历史回顾,揭示了从早期混合架构到现代分层设计的演变过程。 在技术实现层面,文章详细分析了分离架构的优势:性能优化、流畅度控制、测试便利性、扩展灵活性以及团队协作效率。提供了Unity和Unreal两大引擎的具体实现方案,包括代码示例、分层模型和最佳实践。特别探讨了网络同步、客户端预测、插值处理等关键技术难点。 文

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 1060

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【多线程进阶】JUC下的常用类

"JUC"是"Java Util Concurrent"的缩写,代表Java提供的一套并发工具类。这些工具类大大简化了编程并发和多线程应用的复杂性,提供了更高级、更强大、更安全的并发操作功能。以下是一些常见的JUC类:

书生-w的博客 8464

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

LockSupport详解以及使用

LockSupport是Java并发编程中用于线程阻塞和唤醒的基础工具类,位于java.util.concurrent.locks包。它提供比传统wait()/notify()更灵活、可靠的线程控制机制,基于**许可(Permit)**实现:unpark()发放许可,park()消耗许可(无许可则阻塞)。支持先unpark后park不阻塞、指定线程唤醒,且无需同步锁。常用于JUC组件(如AQS)底层,提供park()/unpark()核心方法及带阻塞原因、超时的变体

BUG糕手的博客 808

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java并发编程JUC并发包之LockSupport

java并发编程JUC并发包之LockSupport概述源码分析park方法unPark方法使用方法 写在前面,JUC基础知识,详见JUC并发包核心之AbstractQueuedSynchronizer java并发编程面试必备,详见 java并发编程面试必备 概述 1、java并发编程JUC并发包系列,LockSupport是最特殊的,底层和AQS无关,反而AQS源码中队列的阻塞和通知,是使用LockSupport来实现的 2、LockSupport不会释放锁,LockSupport不会释放锁,Lo

二八开的博客 306

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

JUC 锁之 LockSupport 详解

一 概述 今天我们来介绍 Java 并发编程系列之 LockSupport,在介绍 Synchronized 的时候我们有提过,不推荐同学们使用 Object 的 wait、notify、notifyAll 等函数做多线程间的通信协同,使用 LockSupport 会是更好的选择,本篇就来谈谈 LockSupport,也正好为下篇的 AQS(AbstractQueuedSynchronized)打基础。 二 LockSupport 概念 LockSupport 是线程工具类,主要作用是阻塞和唤醒线程,底层

liuwg1226的专栏 714

【JUC基础】09. LockSupport

LockSupport是一个线程阻塞工具,可以在线程任意位置让线程阻塞。线程操作阻塞的方式其实还有Thread.suspend()和Object.wait()。而LockSupport与suspend()相比,弥补了由于resume()方法而导致线程被挂起(类似死锁)的问题,也弥补了wait()需要先获得某个对象锁的问题,也不会抛出InterruptedException异常。

有一只柴犬的专栏 1131

JUC从实战到源码:LockSupport

在多线程编程中,线程间的协调是一个复杂而又至关重要的话题。Java提供了多种机制来实现线程间的同步和通信,以确保数据的一致性和线程的安全执行。在这些机制中,LockSupport类提供了一种高效且灵活的方式来控制线程的阻塞和唤醒。本文将深入探讨LockSupport类及其与Java中其他线程控制机制的对比,包括传统的wait和notify方法以及基于Condition的await和signal方法。我们将通过代码示例和分析,详细解释这些机制的工作原理和使用场景,以及它们之间的差异和最佳实践。

qq_43843951的博客 1190

JUC工具类-CountDownLatch

是一个用于线程同步的工具类,允许一个或多个线程等待其他线程完成操作。它包含一个计数器,初始值通过构造函数设定。当其他线程调用方法后,计数器减一;当计数器值为 0 时,所有调用await()被阻塞的线程被唤醒。CountDownLatch 虽然看似简单,但其背后的原理体现了 Java 并发编程的设计精髓。通过本篇内容,相信你不仅掌握了它的使用方式,更理解了它为何如此设计、如何保证线程安全、以及如何灵活应用。

左灯右行的爱情 942

一文彻底搞懂JUC结构

JUC 是 Java 并发工具包(Java Util Concurrency),它是 Java 标准库提供的一组用于支持多线程编程的工具和类库。JUC 提供了丰富的并发工具和数据结构,能够帮助我们更方便地编写多线程程序,提高并发性能和可维护性。

永远在路上 2297

JUC是什么?

JUC表示什么 JUC是java.util.concurrent包的缩写,其包结构如下。 JUC框架结构 JUC是包的简称,JUC可能也是Java核心里最难的一块儿,JUC指的是Java的并发工具包,里边提供了各种各样的控制同步和线程通信的工具类。学习JUC之前,最重要的是了解JUC的结构是什么样的。就如同Java的集合框架的结构一样,JUC也有自己框架结构,只是往往被大家忽略,笔者就简单的梳理了下JUC的框架结构,JUC的框架结构不同于集合,它并非是实现继承框架结构。 JUC框架概述 JUC框架的底层

刘滨浩的博客 7996

Java多线程系列--“JUC锁”07之 LockSupport

概述 本章介绍JUC(java.util.concurrent)包中的LockSupport。内容包括: LockSupport介绍 LockSupport是用来创建锁和其他同步类的基本线程阻塞原语。 LockSupport中的park() 和 unpark() 的作用分别是阻塞线程和解除阻塞线程,而且park()和unpark()不会遇到“Thread.suspend 和 Thread...

ycb1689的专栏 262
上一篇: JAVA多线程进阶篇 8、JUC同步器之Exchanger
下一篇: 编程学习的心理建设
悟空学编程
博客等级 码龄12年 32粉丝 123原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟空学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值