2012-02-13 17 views
0

私はJavaの同期について簡単に質問します。 synchronizedメソッドまたはsynchronizedブロックが別のスレッド内で呼び出されたときに、私はJava同期について少しわからないよ別のスレッド内でのJavaの同期

public class Test { 
    private String address; 
    private int age; 

    public synchronized setAddress(String a) { 
     address = a; 
    } 

    public synchronized setAge(int a) { 
     age = a; 
    } 

    public synchronized void start() { 
      ... 

      listener = new Thread(new Runnable(){ 
       public void run() { 
         ... 
        setAge(10); 
         ... 

        synchronized(Test.this) { 
         address = null; 
        } 
       } 
      } 
    } 
} 

次のコードを想定してください。

は、私は上記のコードを実行する場合、それは同期メソッド呼び出しと同期ブロックは、A(スレッドと同期されることを保証しないAのように糸走行クラステストを想定し、 リスナスレッドB.

テストクラスを実行していますか?

ありがとうございます。同期ブロックはTestクラスオブジェクトをロックしている間

答えて

3

いいえ、

同期方法は、Testインスタンスをロックしています。

は私のミスのため申し訳ありませんJava synchronized static methods: lock on object or classJava Synchronized Block for .class

+0

を参照してください。 Test.classをTest.thisに変更しました。それでも同期されていないことを意味しますか? –

+0

@ so-ju no、その場合、同じオブジェクトをロックしているので、それらは同期しています。 –

+0

したがって、リスナースレッドの内部で呼び出される同期ブロックまたは同期メソッドは、リスナースレッドの外部で呼び出されるメソッドと同期されていますか? –

関連する問題