本帖最后由 翁发达 于 2012-9-9 21:34 编辑
话说要实现死锁,就是要锁中嵌套了非同一把锁.
下面我明明同步中嵌套了不同锁,且顺序不一样,
本来两个锁你抢我,我抢你,应该是可以死锁的,为什么这里不行?
我还让其得到一个锁先睡眠一会,可以还是不行
public class ShiSuo
{
public static void main(String[] args)
{
Suo r =new Suo();
Thread t =new Thread(r);
Thread t1 =new Thread(r);
t.start();
try{Thread.sleep(10);}catch(Exception e){}
r.flag=false;
t1.start();
}
}
class Suo implements Runnable
{
private int a =1000;
Object obj = new Object();
boolean flag = true;
public void run()
{
while(true)
{
if(flag)
{
synchronized(obj)//这里是先obj锁,再this也就是本类对象锁.
{
try{Thread.sleep(10);}catch(Exception e){}
synchronized(this)
{
System.out.println(Thread.currentThread().getName()+": "+(a--));
}
}
}
else
{
sell();
}
}
}
public synchronized void sell()//而这里是先本对象锁,再obj对象锁.
{
try{Thread.sleep(10);}catch(Exception e){}
synchronized(obj)
{
System.out.println(Thread.currentThread().getName()+": "+(a--));
}
}
}
|
|