死锁
来源:互联网 发布:深蓝知乎 编辑:程序博客网 时间:2024/06/05 20:48
/** * 一个简单的死锁类* @author iStar * 当类的对象flag=1时(T1),先锁定O1,睡眠500毫秒,然后锁定O2;* 而T1在睡眠的时候另一个flag=0的对象(T2)线程启动,先锁定O2,睡眠500毫秒,等待T1释放O1;* T1睡眠结束后需要锁定O2才能继续执行,而此时O2已被T2锁定;* T2睡眠结束后需要锁定O1才能继续执行,而此时O1已被T1锁定;* T1、T2相互等待,都需要对方锁定的资源才能继续执行,从而死锁。*/class DeadLock implements Runnable { public int flag = 1; static Object o1 = new Object(), o2 = new Object(); @Override public void run() { System.out.println("flag=" + flag); if(flag == 1) { synchronized(o1) { try { Thread.sleep(500); } catch (Exception e) { e.printStackTrace(); } synchronized(o2) { System.out.println("1"); } } } if(flag == 0) { synchronized(o2) { try { Thread.sleep(500); } catch (Exception e) { e.printStackTrace(); } synchronized(o1) { System.out.println("0"); } } } } public static void main(String[] args) { DeadLock td1 = new DeadLock(); DeadLock td2 = new DeadLock(); td1.flag = 1; td2.flag = 0; new Thread(td1).start(); new Thread(td2).start(); } }
0 0
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- 死锁
- Android开发架构规范
- 突破CND的一些方法
- 常用的实用工具jar包导入
- 分布式定时任务框架-Elastic Job
- DataCenter 数据中心
- 死锁
- 72. Edit Distance
- 226. Invert Binary Tree
- 你不知道的Java学习笔记15--StringBuffer类
- Lucene学习教程——Lucene索引创建
- android中ArrayList源码分析
- mysql5.5全备份的问题(- Warning: Skipping the data of table mysql.event. Specify the --events option expli)
- CODEVS 2072 分配房间
- spark如何划分stage