------- android培训、java培训、期待与您交流! ----------
死锁
同步中嵌套同步
也就是有两个房子,A和B,主人A 拿着B房间的锁,B主人拿着A房间的锁,A拿不到B的锁,就进不去房间
而B拿不到A的锁,也进不去房间,两人相持不下
死锁属于操作系统的概念了……其实很好理解。最经典的例子就是,You first,You first问题。
一个门,两个“中国人”,都很有礼貌,走碰头了,都想过这个门,两个人都谦让对方先过,结果是,谁也过不去……。
还有就是哲学家问题!说是四个哲学家坐在桌子上等着吃饭,每个人一边一根筷子,四个人四根筷子。
一个人拿到两根筷子的时候才能吃。否则等待…… ,有一种情况就是,四个人,每个人都拿了一根筷子,
还没有人放手。结果四个人都饿死……
class Lock implements Runnable
{
private boolean flag;
public Lock(boolean flag)
{
this.flag=flag;
}
public void run()
{
if(flag)
{
while(true)
{
synchronized(MyLock.locka) //a锁中嵌套 b锁
{
System.out.println("if locka");
synchronized(MyLock.lockb)
{
System.out.println("if lockb");
}
}
}
}
else
{
while(true)
{
synchronized(MyLock.lockb) //b 锁中嵌套a锁
{
System.out.println("else lockb");
synchronized(MyLock.locka)
{
System.out.println("MyLock.locka");
}
}
}
}
}
}
class MyLock
{
static Object locka=new Object();
static Object lockb=new Object();
}
public class LockDemo {
public static void main(String[] args) {
Thread lock1=new Thread(new Lock(false));
Thread lock2=new Thread(new Lock(true));
lock1.start();
lock2.start();
}