JAVA JUC LockSupport 类

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 【1月更文挑战第5天】JAVA JUC LockSupport 类

LockSupport 类:

https://www.matools.com/file/manual/jdk_api_1.8_google/java/util/concurrent/locks/package-frame.html

LockSupport 是用来创建锁和其他同步类的基本线程阻塞原语。LockSupport 中的park()unpark() 的作用分别是阻塞线程和解除阻塞线程。

类中定义的静态方法:

  • park:暂停线程执行,除非许可证可用。
  • unpark:为给定的线程提供许可证(如果尚未提供)。恢复当前线程的运行。

线程等待唤醒方法:

  • 使用 Object 中的wait() 方法让线程等待,使用Object中的notify() 方法唤醒线程。
  • 使用 JUC 包中的 Conditionawait()方法让线程等待,使用signal()方法唤醒线程。
  • LockSupport类可以阻塞当前线程以及唤醒指定被阻塞的线程。

LockSupport 等待唤醒机制:

通过parkunpark(thread)方法来实现阻塞和唤醒线程的操作。

permit 许可证在默认情况下时没有的,所以在调用了park()方法之后,当前线程机会被暂停,直到别的线程给当前线程发放 permit 许可证之后(调用unpark(thread)方法),处于暂停状态下的线程才会恢复执行。

调用了unpark(thread)方法之后,会给 thread 线程发放 permit 许可证,会自动唤醒park线程,即之前阻塞中的park()方法会立即返回。

park / unpark 方法:

java.lang.Object 类中定义的 waitnotify相比:

  • wait,notify 和 notifyAll 必须配合 Object Monitor(Synchronized) 一起使用,而park 和 unpark 不需要
  • park 和 unpark 是以线程为单位来 【阻塞】和【唤醒】线程,而 notify 只能随机唤醒一个等待的线程,notifyAll 是唤醒所有等待的线程,就不那么【精确】
  • park 和 unpark 可以先 unpark,而 wait 和 notify 不能先 notify
相关文章
|
6天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
33 3
|
2天前
|
人工智能 安全 Java
Java8 - LocalDateTime时间日期类使用详解
Java8 - LocalDateTime时间日期类使用详解
|
4天前
|
安全 Java 程序员
|
4天前
|
Java
Java Class类
Java Class类
8 0
|
11天前
|
Java 编译器
Java Character 类
4月更文挑战第13天
|
12天前
|
存储 Java
Java基础教程(7)-Java中的面向对象和类
【4月更文挑战第7天】Java是面向对象编程(OOP)语言,强调将事务抽象成对象。面向对象与面向过程的区别在于,前者通过对象间的交互解决问题,后者按步骤顺序执行。类是对象的模板,对象是类的实例。创建类使用`class`关键字,对象通过`new`运算符动态分配内存。方法包括构造函数和一般方法,构造函数用于对象初始化,一般方法处理逻辑。方法可以有0个或多个参数,可变参数用`类型...`定义。`this`关键字用于访问当前对象的属性。
|
15天前
|
Java Shell
Java 21颠覆传统:未命名类与实例Main方法的编码变革
Java 21颠覆传统:未命名类与实例Main方法的编码变革
14 0
|
15天前
|
Java
Java 15 神秘登场:隐藏类解析未知领域
Java 15 神秘登场:隐藏类解析未知领域
18 0
|
17天前
|
安全 Java
append在Java中是哪个类下的方法
append在Java中是哪个类下的方法
23 9
|
18天前
|
JavaScript Java 测试技术
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
30 0
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)

热门文章

最新文章