使用线程模拟死锁情形

(转自南瓜皮的网屋)

死锁问题是并发处理的一种典型错误情况,下面的代码演示了这个情形:

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();

 

}

}

你可能感兴趣的:(线程)