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

Java线程死锁

在Java中,线程死锁通常发生在两个或更多个线程相互等待对方释放资源的情况下。以下是一个简单的Java示例,展示了如何创建线程死锁:

public class DeadlockDemo {// 定义两个资源private static Object resource1 = new Object();private static Object resource2 = new Object();// 线程1private static class Thread1 extends Thread {public void run() {synchronized (resource1) {System.out.println("Thread 1: Got resource 1");// 模拟一些耗时操作try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}// 尝试获取resource2,此时可能导致死锁System.out.println("Thread 1: Waiting for resource 2");synchronized (resource2) {System.out.println("Thread 1: Got resource 2");}}}}// 线程2private static class Thread2 extends Thread {public void run() {synchronized (resource2) {System.out.println("Thread 2: Got resource 2");// 模拟一些耗时操作try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}// 尝试获取resource1,此时可能与线程1发生死锁System.out.println("Thread 2: Waiting for resource 1");synchronized (resource1) {System.out.println("Thread 2: Got resource 1");}}}}public static void main(String[] args) {// 启动两个线程new Thread1().start();new Thread2().start();}
}

在这个示例中,我们定义了两个资源resource1和resource2,以及两个线程Thread1和Thread2。线程1首先获取resource1的锁,然后尝试获取resource2的锁。与此同时,线程2首先获取resource2的锁,然后尝试获取resource1的锁。

由于线程1已经持有了resource1的锁,而线程2持有了resource2的锁,当线程1尝试获取resource2的锁时,它会被阻塞,因为线程2已经持有了这个锁。同样地,当线程2尝试获取resource1的锁时,它也会被阻塞,因为线程1已经持有了这个锁。这就导致了两个线程互相等待对方释放资源,从而发生了死锁。

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

相关文章:

  • virtual box安装invalid installation directory
  • 概率分析和随机算法
  • 15_2 Linux Shell基础
  • Catia装配体零件复制
  • 实用小工具-python esmre库实现word查找
  • SSM框架整合,内嵌Tomcat。基于注解的方式集成
  • 系统架构设计师【论文-2016年 试题4】: 论微服务架构及其应用(包括写作要点和经典范文)
  • 面试题:String 、StringBuffer 、StringBuilder的区别
  • TLS指纹跟踪网络安全实践(C/C++代码实现)
  • 小白学RAG:大模型 RAG 技术实践总结
  • Doris Connector 结合 Flink CDC 实现 MySQL 分库分表
  • ModbusTCP、TCP/IP都走网线,一样吗?
  • 网络学习(13)|Spring Boot中获取HTTP请求头(Header)内容的详细解析
  • 【漏洞复现】宏景eHR pos_dept_post SQL注入漏洞
  • 82. 删除排序链表中的重复元素 and II
  • C++ 判断目标文件是否被占用(独占)(附源码)
  • 计划任务 之 一次性的计划任务
  • 非比较排序之计数排序
  • Django路由与会话深度探索:静态、动态路由分发,以及Cookie与Session的奥秘
  • 第7章 用户输入和 while 循环
  • xshell远程无法链接上VM的centos7
  • 拥抱AI-图片学习中的卷积神经算法详解
  • 超详解——深入详解Python基础语法——基础篇
  • 系统架构设计师【论文-2017年 试题2】: 论软件架构风格(包括写作要点和经典范文)
  • Spring Boot 事务传播机制详解
  • 【机器学习】生成对抗网络 (Generative Adversarial Networks | GAN)
  • [ADS信号完整性分析]深入理解IBIS AMI模型设计:从基础到实践
  • Plotly : 超好用的Python可视化工具
  • Linux电话本的编写-shell脚本编写
  • 蓝牙开发 基础知识