class MyLock //先创建了锁的类
{
Object obj1 = new Object();
Object obj2 = new Object();
class SiSuo implements Runnable//死锁程序
{
MyLock my = new MyLock();//创建了锁的对象
private boolean flag;
SiSuo(boolean flag)
{
this.flag = flag;
}
public void run()
{
if(flag)
{
while(true)
{
synchronized(my.obj1)//对象调用
{
System.out.println("code lock1");
synchronized(my.obj2)
{
System.out.println("code lock2");
}
}
}
}
else
{
while(true)
{
synchronized(my.obj2) //和if里面的my.obj2不一样么?
{
System.out.println("else lock2");
synchronized(my.obj1)
{
System.out.println("else lock1");
}
}
}
}
}
}
按上面的程序 怎么锁不住呢 貌似不是同一个锁 怎么回事 难道if和else用的锁不一样? 这样调用有错?
如果锁类里面的Object obj1 = new Object(); 加上静态 类名调用的话 就能锁上 郁闷
|