死锁定义
目前创新互联已为数千家的企业提供了网站建设、域名、网页空间、网站运营、企业网站设计、敦化网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。死锁是指两个或者多个线程被永久阻塞的一种局面,产生的前提是要有两个或两个以上的线程,并且来操作两个或者多个以上的共同资源;我的理解是用两个线程来举例,现有线程A和B同时操作两个共同资源a和b,A操作a的时候上锁LockA,继续执行的时候,A还需要LockB进行下面的操作,这个时候b资源在被B线程操作,刚好被上了锁LockB,假如此时线程B刚好释放了LockB则没有问题,但没有释放LockB锁的时候,线程A和B形成了对LockB锁资源的争夺,从而造成阻塞,形成死锁;具体其死锁代码如下:
public class MyDeadLockTest { public static void main(String[] args){ Object obj1 = new Object(); Thread thread1 = new Thread(new DeadRes(true,obj1)); Thread thread2 = new Thread(new DeadRes(false,obj1)); thread1.start(); thread2.start(); } } class DeadRes implements Runnable{ boolean flag; Object obj; public DeadRes(boolean flag, Object obj1) { this.flag = flag; this.obj = obj1; } @Override public void run() { if(flag){ synchronized (DeadRes.class){ System.out.println(Thread.currentThread().getName()+" acquie lock is DeadRes.class"); synchronized (obj){ System.out.println(Thread.currentThread().getName()+" acquie lock is obj"); } } }else{ synchronized (obj){ System.out.println(Thread.currentThread().getName()+" acquie lock is obj"); synchronized (DeadRes.class){ System.out.println(Thread.currentThread().getName()+" acquie lock is DeadRes.class"); } } } } }