java中死锁问题的实例详解

  

<强> java中死锁问题的实例详解

  

先看代码在做解释

        公共类僵局实现Runnable {   字符串;   字符串b;   布尔标志;   公共死锁(字符串,字符串b,布尔标志){   this.a=一个;   this.b=b;   this.flag=国旗;   }   公共空间run () {   如果(国旗){//当(真正的){   同步(){   System.out.println(“锁”);   同步(b) {   System.out.println(“锁b - - - - -”);   }   }//}   其他}{//当(真正的){   同步(b) {   System.out.println (“b锁”);   同步(){   System.out.println(“锁- - - - -”);   }   }//}   }   }      公共静态void main (String [] args) {   字符串a=新的字符串(“a”);   字符串b=新的字符串(“b”);   僵局僵局d1=new (a, b,真的);   僵局僵局d2=new (a, b,假);   线程t1=新线程(d1);   线程t2=新线程(d2);   t1.start ();   t2.start ();   System.out.println(“欢声笑语中打出GG”);   }      }      之前      

以上是代码部分,如果没有死锁,可以在如果下加(真正的)时,必然死锁、下面来做说明。

  

这个仅仅是为了理解死锁和面试用的,创建两个对象a和b只是为了作为死锁的对象而用,线程t1运行(t1.start()),线程t1拿到锁后,需要继续执行,拿到锁b,而线程t2运行(t2.start()),拿到锁b,想继续拿到锁一个继续执行,这就形成死锁、互相持有对面所需要的锁对象。

  

如果面试,可以简单记下,两个线程,两个锁对象,锁互相嵌套,最少两种状态,同时执行,一次不行就多次,也可锁外面加循环,让线程多次运行,就会死锁,因为运行一次,可能存在偶然,第一个线程执行完了,锁对象释放了,第二个线程才进来执行,如此就有偶然现象。

  

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

java中死锁问题的实例详解