2012-05-24 66 views
2

假設下面的方法:行爲與嘗試的一個synchronized方法,最後

public synchronized void a(){ 
    try{ 
     System.out.println("a"); 
     return; 
    }finally{ 
     System.out.println("a, finally"); 
    } 
} 

據我所知,finally塊仍將甚至return語句後執行。人們甚至可以「覆蓋」返回值! 但我的問題是,該方法是否會在返回語句之後或最終之後解鎖?

+2

最終會被解鎖,因爲最終只會返回方法調用。 –

回答

2

由於return之前finally塊已完成,不執行,並且因爲整個方法是​​,鎖不被釋放,直到finally塊完成後。

如果你需要釋放的例外,而不是從方法返回的鎖,你可以窩在try/finally塊內的​​塊:

public void a(){ 
    try { 
     synchronized (this) { 
      System.out.println("a"); 
      return; 
     } 
    } finally{ 
     System.out.println("a, finally"); 
    } 
} 
1

所有的一號終於將返回前執行聲明....

其次,只有當線程完成執行完整的方法時,纔會釋放該鎖。即(直到此方法的結束括號),此外,此鎖是對象的,所以不僅此方法,但該類中的所有同步方法都是lo cked。

0

是的。它將等待執行finally塊執行後發生的函數返回。

相關問題