线程死锁测试_加锁次序导致死锁
2015-04-02 21:31
218 查看
package test.thread;
public class DeadLockTest extends Thread{
private Object o;
public void setO(Object o){
this.o=o;
}
public void run(){
synchronized(this){
System.out.println("DeadLockTest begin");
synchronized(o){
System.out.println("DeadLockTest_o");
}
System.out.println("DeadLockTest end");
}
}
public static void main(String[] args) {
DeadLockTest dlt=new DeadLockTest();
TT tt=new TT(dlt);
dlt.setO(tt);
dlt.start();
tt.start();
}
}
class TT extends Thread{
private Object o;
public TT(Object o){
this.o=o;
}
public void run(){
synchronized(this){
System.out.println("TT begin");
synchronized(o){
System.out.println("TT_o");
}
System.out.println("TT end");
}
}
}
运行结果:多运行几次就会出现死锁现象
非死锁输出结果可能是:
DeadLockTest begin
DeadLockTest_o
DeadLockTest end
TT begin
TT_o
TT end
死锁结果:
eclise控制台:
eclipse debug窗口:
java VisualVm线程窗口:
java VisualVM线程Dump:
package test.thread;
public class DeadLockTest extends Thread{
private Object o;
public void setO(Object o){
this.o=o;
}
public void run(){
synchronized(this){
System.out.println("DeadLockTest begin");
synchronized(o){
System.out.println("DeadLockTest_o");
}
System.out.println("DeadLockTest end");
}
}
public static void main(String[] args) {
DeadLockTest dlt=new DeadLockTest();
TT tt=new TT(dlt);
dlt.setO(tt);
dlt.start();
tt.start();
}
}
class TT extends Thread{
private Object o;
public TT(Object o){
this.o=o;
}
public void run(){
synchronized(this){
System.out.println("TT begin");
synchronized(o){
System.out.println("TT_o");
}
System.out.println("TT end");
}
}
}
运行结果:多运行几次就会出现死锁现象
非死锁输出结果可能是:
DeadLockTest begin
DeadLockTest_o
DeadLockTest end
TT begin
TT_o
TT end
死锁结果:
eclise控制台:
eclipse debug窗口:
java VisualVm线程窗口:
java VisualVM线程Dump:
相关文章推荐
- Windows下解决TerminateThread终止线程导致死锁问题
- DllMain中不当操作导致死锁问题的分析——线程中调用GetModuleFileName、GetModuleHandle等导致死锁
- 工作线程中调用MFC资源导致死锁
- 调用TerminateThread终止线程所导致的死锁问题
- malloc失败导致线程死锁
- [转载]DllMain中不当操作导致死锁问题的分析——线程中调用GetModuleFileName、GetModuleHandle等导致死锁
- 导致线程死锁容易忽略的一点 SendMessage
- DllMain中不当操作导致死锁问题的分析--线程退出时产生了死锁
- [转载]DllMain中不当操作导致死锁问题的分析--线程退出时产生了死锁
- DllMain中不当操作导致死锁问题的分析--线程退出时产生了死锁
- DllMain中不当操作导致死锁问题的分析——线程中调用GetModuleFileName、GetModuleHandle等导致死锁
- 如何确保N个线程可以访问N个资源同时又不导致死锁
- vc中调用TerminateThread终止线程所导致的死锁问题
- DllMain中不当操作导致死锁问题的分析--线程退出时产生了死锁
- Java代码测试线程死锁 用jvisualvm监控
- 解决死锁导致网站访问故障的具体实例
- 怎样使用mock object测试一个启动新线程的类
- 怎样使用mock object测试一个启动新线程的类
- 死锁导致站点访问不了之解决方案
- 怎样使用mock object测试一个启动新线程的类