public class DeadLockTest implements Runnable {
private int flag;
static Object o1 = new Object();
static Object o2 = new Object(); public void run() {
if (flag == 1) {
synchronized (o1) {
System.out.println("我在执行1的第一步"); try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (o2) {
System.out.println("我在执行1的第二步");
}
}
} if (flag == 0) {
synchronized (o2) {
System.out.println("我在执行0的第一步");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
} synchronized (o1) {
System.out.println("我在执行0 的第二步");
}
}
}
} public static void main(String[] args) {
DeadLockTest dlt1 = new DeadLockTest();
DeadLockTest dlt2 = new DeadLockTest();
dlt1.flag = 1;
dlt2.flag = 0;
Thread t1 = new Thread(dlt1);
Thread t2 = new Thread(dlt2);
t1.start();
t2.start();
}
}用来测试死锁的代码。代码本身没问题。执行后会死锁。
但是我想问下如果把
static Object o1 = new Object();
static Object o2 = new Object();
这两行的static去掉。程序就不会死锁了。为什么?
这里静态修饰起什么作用。谢谢
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货