Javaはオブジェクトレベルのモニターをサポートしています。 したがって、クラスのインスタンスを作成するときは、基本的に異なるオブジェクトを作成しています。ここで、オブジェクト内のメソッドを通じてオブジェクトのすべてのインスタンスによってアクセスされる共有データがあるシナリオを考えてみましょう。Javaでモニターを使用して除外を行う方法
私は、同じクラスの異なるインスタンス(オブジェクト)を持っているため、同期キーワードを使用してスレッド安全性を実現する方法を教えてください。
Javaはオブジェクトレベルのモニターをサポートしています。 したがって、クラスのインスタンスを作成するときは、基本的に異なるオブジェクトを作成しています。ここで、オブジェクト内のメソッドを通じてオブジェクトのすべてのインスタンスによってアクセスされる共有データがあるシナリオを考えてみましょう。Javaでモニターを使用して除外を行う方法
私は、同じクラスの異なるインスタンス(オブジェクト)を持っているため、同期キーワードを使用してスレッド安全性を実現する方法を教えてください。
この場合、がのオブジェクトに同期します。
したがって、すべてのデータにアクセスするFooのインスタンスが100個ある場合、そのデータは単一の参照を持ちます。参照バーを呼び出します。あなたのすべてのあなたのFoosはそれに同期しながらバーにアクセスします。クラスのすべてのインスタンスは、データの一部にアクセスしている場合は
void changeBar(){
synchronized(bar){
//insert logic here
}
}
、あなたは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
はそれ自体がオブジェクトであり、したがってモニタが関連付けられています。