0
私のプロジェクトでは、多くのメソッドを提供するクラスX
を使用する必要がありますが、これらのメソッドがスレッドセーフであるかどうかはドキュメントに記載されていません。どちらか。Javaスレッドの安全性のためのfinal final mutex
だから私は、ミューテックスで、他のクラスのX
をカプセル化しています
public class MyX {
private X instance;
public final Object mutex = new Object();
public MyX() {
this.instance = new X();
}
public X getMethods() {
return this.instance;
}
}
私はX
のメソッドを呼び出す必要があるとき、私はブロックを使用します。
MyX myX = new MyX();
synchronized (myX.mutex) {
X methods = myX.getMethods();
methods.method1();
methods.method2();
... ... ...
}
か、多分私をX
のインスタンスで直接同期することができます。
X instance = new X();
synchronized(instance) {
instance.method1();
instance.method2();
... ... ...
}
どちらの方が良いか知りたいのですが、この問題のより良いデザインがあります。
ありがとうございました。
@Anand Vaidyaありがとうございます。私のプログラムでは、いくつかのスレッドは 'X'クラスの同じインスタンスを共有します。私は次に2番目の方法を選ぶでしょう。 – vesontio
もう1つ質問がありますが、 'synchronized(instance)'は 'public synchronized void method1()'と同じですか? – vesontio
はい。あるスレッドがオブジェクトの同期メソッドを実行しているとき、そのオブジェクトで最初のスレッドが完了するまで、同じオブジェクトブロックの同期メソッドを呼び出す他のすべてのスレッド(実行を中断)。 http://stackoverflow.com/questions/9196723/learning-java-use-of-synchronized-keyword –