在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鎖,這樣最終的結果就是他們互相無限制的等待下去,出現了死鎖,希望大家予以注意!