[三]多线程编程-死锁
继 多线程编程-单例模式:http://www.cnblogs.com/wangfajun/p/6549870.html 介绍的单例模式后,我们接下来说下同步中的一个问题:死锁
什么是死锁?先来个程序例子:
public class Test { public static void main(String[] args) { new Thread(new DeadLock(true)).start(); new Thread(new DeadLock(false)).start(); } } /** * 锁对象 */ class Lock{ static Object one = new Object(); static Object two = new Object(); } class DeadLock implements Runnable{ private boolean flag; DeadLock(boolean flag){ this.flag = flag; } @Override public void run() { if(flag){ synchronized (Lock.one) { System.out.println("if one"); synchronized (Lock.two) { System.out.println("if two"); } } }else{ synchronized (Lock.two) { System.out.println("else two"); synchronized (Lock.one) { System.out.println("else one"); } } } } }
执行结果: if one else two
假设上面的两个线程为A跟B,根据执行结果,首先A获得了Lock.one锁打印了if one,接下来A想要获得Lock.two,但是执行结果并没有打印if two,说明A并没有得到Lock.two,为什么?
你看执行结果的else two,说明B获得了Lock.two,A想要获取B获得的Lock.two,但是B不给,因为B也想要A拥有的Lock.one锁,但A也不给B,造成了死锁。。。
举个例子吧:吃饭了,我有一根筷子,你有一根筷子,我想要你的那根筷子吃上饭,你想要我的这根筷子吃上饭,我们都不给对方,那饭别吃了。。。
死锁就说到这里,明白否?