2011-08-09 8 views
0

Javaはオブジェクトレベルのモニターをサポートしています。 したがって、クラスのインスタンスを作成するときは、基本的に異なるオブジェクトを作成しています。ここで、オブジェクト内のメソッドを通じてオブジェクトのすべてのインスタンスによってアクセスされる共有データがあるシナリオを考えてみましょう。Javaでモニターを使用して除外を行う方法

私は、同じクラスの異なるインスタンス(オブジェクト)を持っているため、同期キーワードを使用してスレッド安全性を実現する方法を教えてください。

答えて

2

この場合、のオブジェクトに同期します。

したがって、すべてのデータにアクセスするFooのインスタンスが100個ある場合、そのデータは単一の参照を持ちます。参照バーを呼び出します。あなたのすべてのあなたのFoosはそれに同期しながらバーにアクセスします。クラスのすべてのインスタンスは、データの一部にアクセスしている場合は

void changeBar(){ 
    synchronized(bar){ 
    //insert logic here 
    } 
} 
0

、あなたはstaticメンバー使用している場合があります。

:その場合は

public class Foo { 
    private static Object shared; 

    public static void accessShared() { /* code */ } 
} 

を、あなたはstatic方法​​を作ることができます

public class Foo { 
    private static Object shared; 

    public static synchronized void accessShared() { /* code */ } 
} 

これはコードに相当します。

public class Foo { 
    private static Object shared; 

    public static void accessShared() { 
    synchronized (Foo.class) { /* code */ } 
    } 
} 

覚えておいてください、Foo.classはそれ自体がオブジェクトであり、したがってモニタが関連付けられています。

関連する問題