java 线程 死锁 问题

来源:百度知道 编辑:UC知道 时间:2024/06/15 05:01:58
为什么第三行的Object要修饰成static这个程序才能死锁呢,这和static有什么关系?
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(o2)
{
try
{
Thread.sleep(500);
}
catch (Exception e)
{
e.printStackTrace();
}
synchronized(o1)
{
System.out.println("1");
}
}
}
if(flag == 0)
{
synchronized(o1)
{
try
{
Thread.sleep(500);
}
catch (Exception e)
{
e.printStackTrace();
}
synchronized(o2)
{
System.out.println("0");
}
}
}
}

public static void main(String[] args

好像线程的同步监视器必须是同一个对象,否则起不到同步的作用,也就不会引起死锁,如果不是static的话,产生两个TestDeadLock 对象的时候就会同时产生两个不同的O1和O2,所以就不会发上死锁

不咋懂 搬个板凳等高人来

那不就成异步了,左腿,右腿,怎么能是一个腿呢?