您的位置:首页 > 其它

死锁示例

2015-09-10 14:11 232 查看
/**
* 死锁示例
*
* @author ZHOUMI2
*
*/

public class TestDeadLock implements Runnable {
static Object o1 = new Object(); // 假如去掉static修饰符,就不会发生死锁
static Object o2 = new Object();
public int flag = 0;

public static void main(String[] args) {
TestDeadLock td1 = new TestDeadLock(); // 虽然new了两个td实例,但是这里共用的是同一份静态变量o1,o2
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 void run() {
System.out.println("flag=" + flag);
if (flag == 0) {
synchronized (o1) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}

synchronized (o2) {
System.out.println("hello");
}
}
}
if (flag == 1) {
synchronized (o2) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}

synchronized (o1) {
System.out.println("ok");
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: