class SiSuo implements Runnable
{
Object a=new Object();
Object b=new Object();
Object c=new Object();
boolean flog=true;
public void run()
{
if(flog)
{
while(true)
{
synchronized(a)
{
System.out.println(Thread.currentThread().getName()+"此处是a锁...");
synchronized(b)
{
System.out.println(Thread.currentThread().getName()+"此处是b锁....");
synchronized(c)
{
System.out.println(Thread.currentThread().getName()+"此处是c锁....");
}
}
}
}
}
else
{
while(true)
{
synchronized(b)
{
System.out.println(Thread.currentThread().getName()+"此处是b锁...");
synchronized(a)
{
System.out.println(Thread.currentThread().getName()+"此处是a锁...");
synchronized(c)
{
System.out.println(Thread.currentThread().getName()+"此处是c锁....");
}
}
}
}
}
}
}
class DeadLock
{
public static void main(String[] args)
{
SiSuo s=new SiSuo();
Thread f=new Thread(s);
Thread f1=new Thread(s);
f.start(); //放在此处前同样可以发生死锁
try{sleep(1);}catch(Exception e){} //请教此处让0线程睡眠顺序是否有区别
s.flog=false;
f1.start(); //放在此处前同样可以发生死锁
}
}
请教高手们, try{sleep(1);}catch(Exception e){} 让0线程睡眠如果放在f.start(); 前面编译执行后结果也能发生死锁,放在s.flog=false; 与 f1.start(); 中间编译执行后结果同样也能发生死锁,疑惑的是让线程睡眠放置的顺序区别点是在哪里呢?
|
|