当前位置: 首页 > 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会因为相互等待而发生死锁。

相关文章:

说说Java中的不可重入锁

什么是锁? 简单来讲在Java中,锁是一种用于并发控制的机制,用于保护共享资源,防止多个线程同时访问或修改数据导致的数据不一致性和线程安全问题。在Java虚拟机(JVM)中,每个对象都有一个相关联的…...

C++学习 --vector

目录 1, 什么是vector 2, 创建vector 2-1, 标准数据类型 2-2, 自定义数据类型 2-3, 其他创建方式 3, 操作vector 3-1, 赋值 3-2, 添加元素 3-2-1, 添加元素(assi…...

Android图片涂鸦,Kotlin(1)

Android图片涂鸦,Kotlin(1) import android.content.Context import android.graphics.Canvas import android.graphics.Color import android.graphics.Paint import android.graphics.Path import android.graphics.PointF import android.…...

upload-labs(1-17关攻略详解)

upload-labs pass-1 上传一个php文件,发现不行 但是这回显是个前端显示,直接禁用js然后上传 f12禁用 再次上传,成功 右键打开该图像 即为位置,使用蚁剑连接 连接成功 pass-2 源码 $is_upload false; $msg null; if (isse…...

《 机器人基础 》期末试卷(A)

一、填空题(30分,每空2分) 1. 按照相机的工作方式,机器人常用相机分为1)__ 单目摄像头 2)__ 双目摄像头 _ 3)_深度摄像头_ 三类。 2. 度量地图强调…...

Azure Machine Learning - Azure AI 搜索中的矢量搜索

矢量搜索是一种信息检索方法,它使用内容的数字表示形式来执行搜索方案。 由于内容是数字而不是纯文本,因此搜索引擎会匹配与查询最相似的矢量,而不需要匹配确切的字词。本文简要介绍了 Azure AI 搜索中的矢量支持。 其中还解释了与其他 Azure…...

3 redis实现一个消息中间件

使用list实现一个队列,可以从左侧入队,也可以从右侧入对 即可以从左侧读取,也可以从右侧读取 1、Lindex Lindex 命令用于通过索引获取列表中的元素 也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的…...

js添加dom到指定div之后,并给添加的dom类名,然后设置其样式,以及el-popover层级z-index过高问题解决。

遇到一个需求,Vue项目做一个表格,要求表头与表格内容分开,如下效果所示,表头与表格有个高度间隔边距(箭头所示),因为默认我们的el-table的表头与内容是一起的: 思路:通过querySelector获取el-table__header-wrapper元素,通过createElement创建一个div,通过 newElem…...

C语言结构体

#include <stdio.h> #include <string.h> #include <stdlib.h>//struct Student_s { // int num; // char name[20]; // char gender; // int age; // float Chinese; // float Math; // float English; // char addr[30]; //}; //最后的分号一定要写&#x…...

【Python大数据笔记_day10_Hive调优及Hadoop进阶】

hive调优 hive官方配置url: Configuration Properties - Apache Hive - Apache Software Foundation hive命令和参数配置 hive参数配置的意义: 开发Hive应用/调优时&#xff0c;不可避免地需要设定Hive的参数。设定Hive的参数可以调优HQL代码的执行效率&#xff0c;或帮助定位问…...

React经典初级错误

文章 前言错误场景问题分析解决方案后言 前言 ✨✨ 他们是天生勇敢的开发者&#xff0c;我们创造bug&#xff0c;传播bug&#xff0c;毫不留情地消灭bug&#xff0c;在这个过程中我们创造了很多bug以供娱乐。 前端bug这里是博主总结的一些前端的bug以及解决方案&#xff0c;感兴…...

C# System.Array.CopyTo() 和 System.Array.Clone() 有什么区别

System.Array.CopyTo() 和 System.Array.Clone() 是用于数组复制的两种不同方法&#xff0c;它们在实现和用途上有一些区别。 System.Array.CopyTo() 方法&#xff1a; CopyTo() 方法用于将数组的元素复制到另一个数组。它是 Array 类的实例方法&#xff0c;可以用于复制一个…...

Stable Diffusion 启动时 got an unexpected keyword argument ‘socket_options‘ 错误解决

Stable Diffusion 启动时 got an unexpected keyword argument socket_options 错误解决 问题解决方法 问题 Launching Web UI with arguments: Traceback (most recent call last):File "launch.py", line 48, in <module>main()File "launch.py"…...

CSS 文本属性篇

文字颜色 属性名&#xff1a;color作用&#xff1a;控制文字的颜色可选值&#xff1a; 1.颜色名 color: blue; 2.rgb或rgba color:rgb(132, 220, 254); color:rgba(132, 220, 254,0.5); 3.hex或hexa&#xff08;十六进制&#xff09; color:#0078d4; color:#0078d48b; 4.hsl或h…...

Activiti,Apache camel,Netflex conductor对比,业务选型

Activiti,Apache camel,Netflex conductor对比&#xff0c;业务选型 1.activiti是审批流&#xff0c;主要应用于人->系统交互&#xff0c;典型应用场景&#xff1a;请假&#xff0c;离职等审批 详情可见【精选】activti实际使用_activiti通过事件监听器实现的优势_记录点滴…...

pythom导出mysql指定binlog文件

要求 要求本地有py环境和全局环境变量 先测试直接执行binlog命令执行命令 Windows 本地直接执行命令 # E:\output>E:\phpstudy_pro\Extensions\MySQL5.7.26\bin\mysqlbinlog binglog文件地址 # --no-defaults 不限制编码 # -h mysql链接地址 # -u mysql 链接名称 # -p m…...

TDengine 跨版本迁移实战

TDengine 3.0 已经退出了近一年&#xff0c;目前已经到了 3.2 版本。很遗憾的是 2.x 和 3.x 之间的数据文件不兼容。 如果向从 2.x 升级到 3.x 只能选择数据迁移的方式。 目前数据迁移有三种方法&#xff1a; 使用官方推荐工具 taosx。使用 taosdump 工具。自己写程序。 迁移…...

FPGA设计时序约束八、others类约束之Set_Case_Analysis

目录 一、序言 二、Set Case Analysis 2.1 基本概念 2.2 设置界面 2.3 命令语法 2.4 命令示例 三、工程示例 四、参考资料 一、序言 在Vivado的时序约束窗口中&#xff0c;存在一类特殊的约束&#xff0c;划分在others目录下&#xff0c;可用于设置忽略或修改默认的时序…...

xftp连接wsl2

在WSL中默认是没有安装OpenSSH&#xff0c;需要自己安装。 安装 sudo apt update sudo apt install openssh-server检查是否安装成功 ssh -V配置ssh sudo vim /etc/ssh/ssh_config设置端口 Port 22启动ssh服务 sudo service ssh startxftp连接 主机地址&#xff1a;127.…...

Cross-View Transformers for Real-Time Map-View Semantic Segmentation 论文阅读

论文链接 Cross-View Transformers for Real-Time Map-View Semantic Segmentation 0. Abstract 提出了 Cross-View Transformers &#xff0c;一种基于注意力的高效模型&#xff0c;用于来自多个摄像机的地图视图语义分割使用相机感知的跨视图注意机制隐式学习从单个相机视…...

保姆级教程:用UE4/UE5的WebUI插件,把Web页面嵌入数字孪生项目

虚幻引擎WebUI插件实战&#xff1a;数字孪生项目中无缝嵌入Web页面的完整指南在数字孪生项目的开发过程中&#xff0c;将实时数据可视化的Web页面嵌入到虚幻引擎场景中已成为提升用户体验的关键技术。本文将以UE4/UE5的WebUI插件为核心工具&#xff0c;手把手演示如何将Web前端…...

告别截图!用UE4/UE5的WebUI插件,把实时数据大屏“搬”进数字孪生场景

告别截图&#xff01;用UE4/UE5的WebUI插件实现实时数据大屏与数字孪生场景的无缝融合在工业仿真和智慧城市领域&#xff0c;数据可视化大屏与三维场景的联动一直是技术难点。传统解决方案往往依赖静态截图或视频播放&#xff0c;导致数据延迟、交互缺失。本文将深入探讨如何通…...

Cloudflare四重验证机制与行为建模反爬原理深度解析

1. 这不是“绕过Cloudflare”&#xff0c;而是重新理解“人机边界”的实战现场最近两周&#xff0c;我连续接手了三个爬虫项目&#xff0c;全卡在同一个地方&#xff1a;Cloudflare的“Checking your browser before accessing...”页面。不是5秒跳转失败&#xff0c;就是直接返…...

基于MLP误差预测的自适应多尺度模拟:原理、实现与应用

1. 项目概述&#xff1a;当多尺度模拟遇见机器学习在计算材料科学、流体力学乃至生物物理领域&#xff0c;我们常常面临一个经典的两难困境&#xff1a;追求物理真实性的高精度模型&#xff08;比如基于粒子的分子动力学模拟&#xff09;计算成本高得吓人&#xff0c;而计算高效…...

别再让Ubuntu22.04时间错乱了!用hwclock和timedatectl搞定硬件时钟时区的保姆级教程

彻底解决Ubuntu 22.04时间同步问题&#xff1a;硬件时钟与时区管理权威指南你是否曾在双系统切换后发现Ubuntu显示的时间比实际快了8小时&#xff1f;或者每次重启后系统时间都会"跳票"&#xff1f;这些看似小问题背后&#xff0c;隐藏着操作系统与硬件时钟&#xff…...

SPTD:从训练动态中挖掘置信度信号,提升AI模型选择性预测能力

1. 项目概述&#xff1a;当模型学会说“我不知道”在医疗影像诊断、自动驾驶决策或者金融风控这些领域&#xff0c;一个AI模型的预测错误&#xff0c;代价可能是巨大的。我们通常希望模型不仅给出答案&#xff0c;还能告诉我们它对这个答案有多“确信”。这就是不确定性量化的核…...

机器学习中类别不平衡问题的实战解决方案:加权分类与SMOTE对比

1. 项目概述与核心挑战在机器学习的世界里&#xff0c;我们常常会遇到一个看似简单却异常棘手的问题&#xff1a;数据不平衡。想象一下&#xff0c;你正在训练一个模型来识别一种罕见的疾病&#xff0c;比如在10万头牛中&#xff0c;只有250头感染了牛病毒性腹泻&#xff08;BV…...

Shannon AI:面向业务流的自动化渗透测试工具

1. 这不是“AI替代人”&#xff0c;而是把渗透测试工程师从重复劳动里解救出来我第一次在客户现场用Shannon AI跑完Juice Shop靶场&#xff0c;盯着终端里滚动的日志&#xff0c;心里想的不是“哇这工具真快”&#xff0c;而是“原来我过去三年有将近200小时&#xff0c;都花在…...

Token CSS高级技巧:如何扩展自定义设计令牌和主题的终极指南

Token CSS高级技巧&#xff1a;如何扩展自定义设计令牌和主题的终极指南 【免费下载链接】tokencss 项目地址: https://gitcode.com/gh_mirrors/to/tokencss Token CSS是一个革命性的设计令牌工具&#xff0c;它让CSS开发变得更加智能和高效。如果你已经掌握了Token CS…...

Codex入门17-上下文管理(高手秘技:如何让AI精准理解你的百万行大型项目)

Codex入门17-上下文管理(高手秘技:如何让AI精准理解你的百万行大型项目) 📌 文章简介:上下文窗口是 AI 编程的"生命线"——它决定了 AI 能"看到"多少代码、"理解"多少架构。本文深入解析上下文窗口的本质,详解 Codex 如何自动收集项目信息…...