当前位置: 代码迷 >> J2EE >> 哪位高手能写一个简单的线程死锁出来
  详细解决方案

哪位高手能写一个简单的线程死锁出来

热度:244   发布时间:2016-04-22 03:38:03.0
谁能写一个简单的线程死锁出来
小弟写出来的死锁在Eclipse里不生效,程序还是退出了,不知道啥原因
Java code
if(flag==0){                synchronized(o1){                    System.out.println("0--开始锁住o1");                    try {                        Thread.sleep(1000);                    } catch (InterruptedException e) {}                synchronized(o2){                    System.out.println("0--开始锁住o2");                    LockTest.m("0"+Thread.currentThread().getName());                }                }            }                        if(flag==1){                synchronized(o2){                    System.out.println("1--开始锁住o2");                    try {                        Thread.sleep(1000);                    } catch (InterruptedException e) {}                }                synchronized(o1){                    System.out.println("1--开始锁住o1");                    LockTest.m("1"+Thread.currentThread().getName());                }            }


------解决方案--------------------
public class Deadlock {

public static void main(String args[]) {
final Object resource1 = "resource1";
final Object resource2 = "resource2";
Thread t1 = new Thread() {

@Override
public void run() {
synchronized (resource1) {
System.out.println("Thread 1: locked resource 1");
try {
Thread.sleep(50);
} catch (InterruptedException e) {
}
synchronized (resource2) {
System.out.println("Thread1: locked resource 2");
}
}
}
};

Thread t2 = new Thread() {

@Override
public void run() {
synchronized (resource2) {
System.out.println("Thread2: locked resource 2");
try {
Thread.sleep(50);
} catch (InterruptedException e) {
}
synchronized (resource1) {
System.out.println("Thread2: lock resource 1");
}
}
}
};

t1.start();
t2.start();
}
}
  相关解决方案