synchronized
の機能と の機能を組み合わせる方法を探していjava.util.concurrent.locks.ReentrantReadWriteLock
ます。より具体的には、WriteLock
が設定されている場合にのみ 1 つのメソッドをロックしたいのですが、 のようなオブジェクト変数にロックを設定したいと考えていますsynchronized
。説明に役立つ例を次に示します。
ReentrantReadWriteLock の例
public void methodOne(String var) {
lock.writeLock().lock;
try {
// Processing
}
finally {
lock.writeLock().unlock();
}
}
public void methodTwo(String var) {
lock.readLock().lock;
try {
// Processing
}
finally {
lock.readLock().unlock();
}
}
この例では、 onがロックされていないmethodTwo
限り、ブロックせずに呼び出すことができます。これは良い機能であり、私が探している機能ですが、がロックされている場合、 のすべてのケースでロックされています。代わりに、次のようにロックするだけにしたいと思います:writeLock
methodOne
writeLock
var
var
synchronized
同期の例
public void methodOne(String var) {
synchronized(var) {
// Processing
}
}
public void methodTwo(String var) {
synchronized(var) {
// Processing
}
}
現在、メソッドは入力の条件付きのみをブロックします。これは良いことであり、私が探しているものですがmethodTwo
、同じキーで複数の同時呼び出しがある場合、それらはブロックされます。代わりに、これを「読み取り」スタイルのロックにして、呼び出しを許可したいと思います。
基本的に、両方の機能セットを取得するために変数に同期できる ReadWriteLock が必要です。