2013-02-27 32 views
0

我知道可以將一段代碼或實例放入同步塊中。所以考慮這個簡短的例子:什麼可以放在同步塊內?

public class SynchronizedObject { 
    public static void main(String args){ 
     System.out.println(" 1 "); 

     synchronized(args){  
      //do stuff 
     } 

在這種情況下,args是一個實例,我是否正確?而且這個實例也是一個對象?在任何情況下,您都不能將變量或局部變量放入同步塊中?

回答

2

你的問題還不清楚。你似乎混合塊和聲明:

  • 在你的例子中,同步的塊是無論是在大括號內,所以//do stuff部分。
  • args,在您的示例中,​​語句使用的鎖。

您可能會從閱讀tutorial受益。

什麼可以放在同步塊內?

任何你想要的只要它是有效的Java語句。

args是一個實例,我是否正確?

args是不的String實例的引用(雖然你可能是指String[])。

這個實例也是一個對象嗎?

嗯,是的,一個類的實例是一個對象。

在任何情況下都不能將變量或局部變量放入同步塊中?

在塊內部,您可以按照上面的解釋進行操作。​​關鍵字(鎖)的參數需要是對對象的非空實例的引用。如果你願意,這可能是一個局部變量(儘管這很可能無法達到你的目標)。

2

在這種情況下,args是一個局部變量 - 它是String類的一個實例。而String確實是一個Object在Java中所有類都從Object

衍生的是把局部變量的同步塊沒有限制 - 那裏有沒有太大的做它來獲得,但也有它沒有限制任何。

儘管在局部變量上同步,但您不會獲得任何有用的東西。

+0

謝謝我現在得到它 – 2013-02-28 00:07:21

相關問題