使用线程模拟死锁情形
2012-08-10 13:18
148 查看
(转自南瓜皮的网屋)
死锁问题是并发处理的一种典型错误情况,下面的代码演示了这个情形:
public class TestDeadLock implements Runnable {
public int flag = 1;
static Object o1 = new Object(), o2 = new Object();
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) {
TestDeadLock td1 = new TestDeadLock();
TestDeadLock td2 = new TestDeadLock();
td1.flag = 1;
td2.flag = 0;
Thread t1 = new Thread(td1);
Thread t2 = new Thread(td2);
t1.start();
t2.start();
}
}
死锁问题是并发处理的一种典型错误情况,下面的代码演示了这个情形:
public class TestDeadLock implements Runnable {
public int flag = 1;
static Object o1 = new Object(), o2 = new Object();
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) {
TestDeadLock td1 = new TestDeadLock();
TestDeadLock td2 = new TestDeadLock();
td1.flag = 1;
td2.flag = 0;
Thread t1 = new Thread(td1);
Thread t2 = new Thread(td2);
t1.start();
t2.start();
}
}
相关文章推荐
- 关于线程中锁的使用以及死锁情况
- 线程死锁及如何使用JDK自带工具监测是否有死锁现象
- 线程-模拟死锁问题
- JavaSE第一百零四讲:哲学家就餐问题、死锁与使用wait及notify方法实现线程之间的相互通信
- Thread Dump线程死锁检测工具(JStack)的使用详解
- .net学习之多线程、线程死锁、线程通信 生产者消费者模式、委托的简单使用、GDI(图形设计接口)常用的方法
- Android中使用ListView实现分页刷新(线程休眠模拟)
- C# 线程手册 第三章 使用线程 小心死锁
- 线程锁 和 同步锁规则 模拟线程死锁 和Lock锁
- 使用Java thread dump分析CPU高使用率和线程死锁问题
- 使用gdb调试死锁线程
- 线程的笔记1 wait yield join interrupt deamon 死锁使用方法
- Android使用listview实现分页刷新(线程休眠模拟)
- 学习java多线程的笔记3-使用BlockingQueue阻塞队列来模拟两个线程之间的通信
- 关于使用Windbg查看线程死锁问题
- 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq
- Thread Dump线程死锁检测工具(JStack)的使用详解
- 关于使用WinDebug查看线程死锁问题
- java 使用线程模拟 队列实现
- Java模拟排查线程死锁问题