2011-04-13 191 views
2

我只是想確定我明白了以下的權利。java方法同步對象

  1. 方法上的synchronized關鍵字禁止在類的一個實例上同時運行兩個此類方法。
  2. 同步對象是有問題的實例。

如果是這樣的話下面的例子應該是正確的

class Example 
{ 
    public synchronized void method1() 
    { 
    // mark 1 - never here when other thread at mark 2 or 4 
    } 

    public synchronized void method2() 
    { 
    // mark 2 - never here when other thread at mark 1 or 4 
    } 

    public void method3() 
    { 
    // mark 3 - may be (!) here when other thread at mark 1, 2 or 4 
    synchronized (this) 
    { 
     // mark 4 - never here when other thread at mark 1 or 2 
    } 
    } 
} 

THX一個「是」或篡改。 b

回答

3

您的理解是正確的。

看一看供進一步討論如下:Avoid synchronized(this) in Java?

+0

感謝您的快速回復 – 2011-04-13 10:53:28

+0

您的鏈接很有趣,雖然'不使用同步(這個)''在我看來,就像普通的經驗法則一樣,這不是普遍適用的...... – 2011-04-13 11:47:28

2

你所說的話是正確的。

,並添加一兩件事,如果該方法是一個靜態方法,該是鎖。