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限り、ブロックせずに呼び出すことができます。これは良い機能であり、私が探している機能ですが、がロックされている場合、 のすべてのケースでロックされています。代わりに、次のようにロックするだけにしたいと思います:writeLockmethodOnewriteLockvarvarsynchronized
同期の例
public void methodOne(String var) {
synchronized(var) {
// Processing
}
}
public void methodTwo(String var) {
synchronized(var) {
// Processing
}
}
現在、メソッドは入力の条件付きのみをブロックします。これは良いことであり、私が探しているものですがmethodTwo、同じキーで複数の同時呼び出しがある場合、それらはブロックされます。代わりに、これを「読み取り」スタイルのロックにして、呼び出しを許可したいと思います。
基本的に、両方の機能セットを取得するために変数に同期できる ReadWriteLock が必要です。