こんにちは私は次のようなすべてのメソッドで同期ブロックを必要とする複数のメソッドを持つクラスを持っています:
public class Test2 {
private Object mutex=new Object();
private OtherClass obj=new OtherClass();
public void method1(){
//do some stuff
synchronized (mutex) {
obj.//some method
//do some stuff
}
//do other stuff
}
public void method2(){
//do some stuff
synchronized (mutex) {
obj.//some method
//do some stuff
}
//do other stuff
}
public void method3(){
//do some stuff
synchronized (mutex) {
obj.//some method
//do some stuff
}
//do other stuff
}
public void method4(){
//do some stuff
synchronized (mutex) {
obj.//some method
//do some stuff
}
//do other stuff
}
}
私はmutexを使用してブロックを同期しているので、使用されている場合はどうなりますかmethod1
。他のmethod2
同期されたブロックは、フローがの同期されたブロックから出るまで待機しmethod1
ます。
これを起こしたくないので、どうすればよいですか?method2
すべてのメソッドにmutexを使用しているので、同期されたブロックがロックされることを知っています。これを削除するにはどうすればよいですか?使用するメソッドごとにメンバー変数を作成する必要がありますか、それともこれを回避する別の方法がありますか?
同じメソッドが呼び出された場合にのみ他のスレッドを待機させたい..2つのスレッドがmehod1をクラス化する場合のように、2番目のスレッドは待機する必要があります。ただし、2番目のスレッドがmethod2を呼び出す場合は、待機しないでください。