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