java 同步死鎖問題

在java編程中儘量不要在一個同步塊中調用另外一個對象的同步方法:原因如下

public class A implements Runnable {

 public void run() {
  // TODO Auto-generated method stub
  
 }
 
 public synchronized void m1() {
             B.m2();---------------------------------------------1處
 }
}

public class B implements Runnable {

 public void run() {
  // TODO Auto-generated method stub
  
 }
 
 public  void m2() {
  synchronized(this) {
   A.m1();   ---------------------------------------------------2處
  }
 }
}

假設在某段時間內A的一個實例執行到了2處,此時它獲得了B的鎖,等待A的鎖,而正好在此時B的對象也執行到了1處,等待B對象的鎖,獲得了A的鎖,

但是A對象不執行玩2就不會釋放B的鎖,而B對象不執行完1處就不會釋放A鎖,這樣最終的結果就是他們互相無限制的等待下去,出現了死鎖,希望大家予以注意!

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章