public class ThreadDeadLock 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(1000);
}catch(Exception ie) {
ie.printStackTrace();
}
synchronized(o2) {
System.out.println("1");
}
}
}
if (flag == 0) {
synchronized(o2) {
try {
Thread.sleep(1000);
}catch(Exception ie) {
ie.printStackTrace();
}
synchronized(o1) {
System.out.println("0");
}
}
}
}
public static void main(String[] args) {
ThreadDeadLock tdl1 = new ThreadDeadLock();
ThreadDeadLock tdl2 = new ThreadDeadLock();
Thread t1 = new Thread(tdl1);
Thread t2 = new Thread(tdl2);
tdl1.flag = 1;
tdl2.flag = 0;
t1.start();
t2.start();
}
} 这是个线程死锁程序, 为什么要在程序的第3行加上static 关键字, 如果不加,则不会发生线程死锁? 难道线程死锁问题都一定要加上static关键字吗? 小弟是Java新手, 还请大侠们, 高手们帮我看看这程序, 在这先谢了!!!!
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(1000);
}catch(Exception ie) {
ie.printStackTrace();
}
synchronized(o2) {
System.out.println("1");
}
}
}
if (flag == 0) {
synchronized(o2) {
try {
Thread.sleep(1000);
}catch(Exception ie) {
ie.printStackTrace();
}
synchronized(o1) {
System.out.println("0");
}
}
}
}
public static void main(String[] args) {
ThreadDeadLock tdl1 = new ThreadDeadLock();
ThreadDeadLock tdl2 = new ThreadDeadLock();
Thread t1 = new Thread(tdl1);
Thread t2 = new Thread(tdl2);
tdl1.flag = 1;
tdl2.flag = 0;
t1.start();
t2.start();
}
} 这是个线程死锁程序, 为什么要在程序的第3行加上static 关键字, 如果不加,则不会发生线程死锁? 难道线程死锁问题都一定要加上static关键字吗? 小弟是Java新手, 还请大侠们, 高手们帮我看看这程序, 在这先谢了!!!!
private int flag ;
private Object o1 ;
private Object o2 ;
public ThreadDeadLock(int flag, Object o1, Object o2) {
super();
this.flag = flag;
this.o1 = o1;
this.o2 = o2;
} public void run() {
System.out.println("flag = " + flag);
if (flag == 1) {
synchronized (o1) {
try {
Thread.sleep(300);
} catch (Exception ie) {
ie.printStackTrace();
} synchronized (o2) {
System.out.println("1");
}
}
} if (flag == 0) {
synchronized (o2) {
try {
Thread.sleep(300);
} catch (Exception ie) {
ie.printStackTrace();
}
synchronized (o1) {
System.out.println("0");
}
}
}
} public static void main(String[] args) {
Object o1 = new Object();
Object o2 = new Object();
ThreadDeadLock tdl1 = new ThreadDeadLock(1,o1,o2);
ThreadDeadLock tdl2 = new ThreadDeadLock(0,o1,o2);
Thread t1 = new Thread(tdl1);
Thread t2 = new Thread(tdl2);
t1.start();
t2.start();
}
}
输出结果:
flag = 1
flag = 0
....然后死锁