死锁是什么?死锁产生的条件?如何避免死锁?以及死锁的示例代码(Java代码)
文章目录
- 一、什么是死锁?
- 二、产生死锁的条件?
- 三、产生死锁的示例代码(java)
- 四、如何避免死锁?
一、什么是死锁?
- 下面图片参考 JavaGuide中的内容:
- 死锁的概念:
死锁:指的是相互两个线程之间都需要获取对方的资源才能进行下一步,如果每个线程都不肯将自己所持有的资源释放掉,这时就会导致死锁了。
二、产生死锁的条件?
- 产生死锁的条件:
三、产生死锁的示例代码(java)
- 代码实现:
package DeadLock;public class DeadLock {//先定义两个静态类型的字符串,让两个字符串来作为锁,方便后序加锁public static String obj1 = "obj1";public static String obj2 = "obj2";public static void main(String[] args){Thread a = new Thread(new Lock1());Thread b = new Thread(new Lock2());a.start();b.start();}
}//继承Runnable接口,实现多线程
class Lock1 implements Runnable{@Overridepublic void run(){try{System.out.println("Lock1 running");while(true){synchronized(DeadLock.obj1){System.out.println("Lock1 lock obj1");Thread.sleep(3000);synchronized(DeadLock.obj2){System.out.println("Lock1 lock obj2");}}}}catch(Exception e){e.printStackTrace();}}
}//继承Runnable接口,实现多线程
class Lock2 implements Runnable{@Overridepublic void run(){try{System.out.println("Lock2 running");while(true){synchronized(DeadLock.obj2){System.out.println("Lock2 lock obj2");Thread.sleep(3000);synchronized(DeadLock.obj1){System.out.println("Lock2 lock obj1");}}}}catch(Exception e){e.printStackTrace();}}
}
- 代码执行结果:
四、如何避免死锁?
死锁是什么?死锁产生的条件?如何避免死锁?以及死锁的示例代码(Java代码)相关推荐
- 计算机系统学习之(1):基础知识概要——进程、中断、线程、竞态条件、关键区域、死锁、进程调度
文章目录 进程的创建 哪些事件导致进程的创建 fork 和 exec 命令创建和控制进程 fork() 命令 execve() 命令 进程的状态 中断 中断的种类 线程 线程共享内容 线程独有内容 进 ...
- 读写分离,读写分离死锁解决方案,事务发布死锁解决方案,发布订阅死锁解决方案|事务(进程 ID *)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务...
前言: 由于网站访问压力的问题,综合分析各种因素后结合实际情况,采用数据库读写分离模式来解决当前问题.实际方案中采用"事务发布"模式实现主数据库和只读数据库的同步, ...
- 查询数据的时候 提示事务(进程 ID **)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。
转自:https://blog.csdn.net/vip__888/article/details/6087850 =======================以下为原文内容============ ...
- C#种死锁:事务(进程 ID 112)与另一个进程被死锁在 锁
C#种死锁:事务(进程 ID 112)与另一个进程被死锁在 锁 参考文章: (1)C#种死锁:事务(进程 ID 112)与另一个进程被死锁在 锁 (2) 通信缓冲区 资源上,并且已被选作死锁牺牲品.请 ...
- JDK中ThreadDump诊断Java代码中的线程死锁问题
多线程的死锁..死锁不是死了而是线程互相等待... 在项目中可能就是在几十万行的代码中存在一个死锁的问题,如何发现这个问题并且解决这个问题. JavaJDK为我们提供了一个诊断工具叫做ThreadDu ...
- EF 多线程TransactionScope事务异常事务(进程 ID 58)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。
在使用EF的TransactionScope事务时,如果多线程程序,经常会抛出如下异常 {"事务(进程 ID 58)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品.请重新运行该事务 ...
- 解决:与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品
今天程序运行时出现的一个错误,连接数据库Sql Server2012 进行更新操作时出现: java.sql.SQLException: 事务(进程 ID 126)与另一个进程被死锁在 锁 资源上,并 ...
- 与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。问题解决
前几天有客户反馈,查询的时候会偶发死锁问题,数据库是sqlserver,报错如下: java.sql.SQLException: 事务(进程 ID 126)与另一个进程被死锁在 锁 资源上,并且已被选 ...
- 事务(进程 ID XXX)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品
多线程高并发量执行方法的过程中控制台出现:事务(进程 ID XXX)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品. 可以尝试对方法加锁来解决问题. //定义lock锁 private fi ...
最新文章
- python使用osgeo库_python中使用gdal,osgeo
- 安装JAVA8要登录_JDK8的安装及环境配置
- vb红绿灯自动切换_VB红绿灯程序.doc
- linux信号量使用
- weblogic部署war包
- C#调用Qpdf的界面+拖拽pdf文件到窗口+解除pdf权限密码+另存为
- 孩子学python_教孩子学编程 Python
- 如何在word中安装grammarly
- 计算机控制面板设置命令,控制面板在哪?控制面板命令,5种控制面板快速打开法...
- 新买笔记本屏幕缝隙有灰尘_如何清除笔记本电脑上的灰尘
- 教你如何使用语雀提高效率
- 这样定义通用人工智能
- Buddy 内存管理机制(下)
- XStream分析(2)
- 如何将pdf转换成ppt呢?
- 《Pro SQL Server Internals, 2nd edition》CHAPTER 2 Tables and Indexes-Clustered Indexes
- Gopher China 大会福利加码
- SAS MACRO Debugging option
- vscode更换编译器_打造性感好用的VS Code编辑器
- 【GPS仿真】基于matlab GPS信号捕获跟踪【含Matlab源码 2126期】
热门文章
- 关于ftp的说法错误的是_斯坦福教授:成长型思维的养成,只需要换个说法,思维是可以训练的!...
- 关于计算机设计的论文,计算机的设计论文.doc
- 一些SQL性能优化的实用经验
- mfc只有doc才能序列化吗_MFC序列化-IMPLEMENT_SERIAL(...)
- 用mendeley在word中插入文献_Mendeley在Word添加工具栏和插入和删除文献的方法 | 科研动力...
- 查找txt中的中文字符_找出nginx请求日志中某个url请求总次数排名前十的ip地址...
- android运动轨迹rungps_android运动轨迹rungps_Android使用百度地图API实现GPS步行轨迹...
- 移动**21*设置无法接通_七大新增时刻传奇!外服率先体验而国服暂时无法推出的粉传盘点+21赛季移动端首批精选上架!...
- 用指针实现删除数组中小于10的数据
- 软件测试用户故事评审实验报告,软件测试评审题目.doc