当前位置: 首页 > news >正文

说说Java中的不可重入锁

什么是锁?

简单来讲在Java中,锁是一种用于并发控制的机制,用于保护共享资源,防止多个线程同时访问或修改数据导致的数据不一致性和线程安全问题。在Java虚拟机(JVM)中,每个对象都有一个相关联的锁监视器,也称为内置锁或监视器锁。每个对象的锁监视器用于实现对象级别的互斥访问,确保同一时间只有一个线程可以获取该对象的锁并执行同步代码块。(由于每个JVM的锁监视器都是独立存在的,所以就会引出我们的分布式锁的需求)

可重入锁和不可重入锁

在Java中,可重入锁是指同一个线程可以多次获取同一个锁而不会产生死锁或其他异常情况。换句话说,可重入锁允许线程在持有锁的情况下再次获取该锁,而不会被自己所持有的锁所阻塞。不可重入锁是指一旦线程获取了锁,再次尝试获取同一个锁时会被阻塞。

下面是一段不可重入锁的代码:

public class DeadlockExample {private static final Object lockA = new Object();private static final Object lockB = new Object();public static void main(String[] args) {Thread thread1 = new Thread(() -> {synchronized (lockA) {System.out.println("Thread 1 acquired lockA");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}synchronized (lockB) {System.out.println("Thread 1 acquired lockB");}}});Thread thread2 = new Thread(() -> {synchronized (lockB) {System.out.println("Thread 2 acquired lockB");synchronized (lockA) {System.out.println("Thread 2 acquired lockA");}}});thread1.start();thread2.start();}
}

如此线程A和线程B会因为相互等待而发生死锁。

http://www.lryc.cn/news/235902.html

相关文章:

  • C++学习 --vector
  • Android图片涂鸦,Kotlin(1)
  • upload-labs(1-17关攻略详解)
  • 《 机器人基础 》期末试卷(A)
  • Azure Machine Learning - Azure AI 搜索中的矢量搜索
  • 3 redis实现一个消息中间件
  • js添加dom到指定div之后,并给添加的dom类名,然后设置其样式,以及el-popover层级z-index过高问题解决。
  • C语言结构体
  • 【Python大数据笔记_day10_Hive调优及Hadoop进阶】
  • React经典初级错误
  • C# System.Array.CopyTo() 和 System.Array.Clone() 有什么区别
  • Stable Diffusion 启动时 got an unexpected keyword argument ‘socket_options‘ 错误解决
  • CSS 文本属性篇
  • Activiti,Apache camel,Netflex conductor对比,业务选型
  • pythom导出mysql指定binlog文件
  • TDengine 跨版本迁移实战
  • FPGA设计时序约束八、others类约束之Set_Case_Analysis
  • xftp连接wsl2
  • Cross-View Transformers for Real-Time Map-View Semantic Segmentation 论文阅读
  • MySQL InnoDB 引擎底层解析(一)
  • redis安装(Windows和linux)
  • 【LeetCode刷题-树】--1367.二叉树中的链表
  • 【嵌入式 – GD32开发实战指南(ARM版本)】第2部分 外设篇 - 第3章 温度传感器DS18B20
  • 基于spring gateway 的静态资源缓存实现
  • SDUT OJ《算法分析与设计》搜索算法
  • 【NI-DAQmx入门】校准
  • C语言链表
  • LabVIEW进行MQTT通信及数据解析
  • 基于DOTween插件实现金币飞行到指定位置功能
  • python-opencv 培训课程作业