0

多くのオブジェクトを格納する bufferPool があります。異なるスレッドが同じオブジェクトを同時に書き込むのを防ぎ、効率を高めるために を使用しますReadWriteLock。しかし、それがどのように機能するかについてはよくわかりません。アクセスしたいオブジェクトを見つけたら、

if(perm.equals(Permissions.READ_ONLY)) {                    
  readLock.lock();
} else if(Permissions.READ_WRITE) {                 
  writeLock.lock(); 
}
return the object I want to access

システムは、プログラムがどのオブジェクトにアクセスしてロックしようとしているかをどのように認識しますか? または、ここでの構文が間違っていますか? ヘルプ!!!ありがとう

4

2 に答える 2

1

システムは、ロックしようとしているものを認識していません。一連のアイテムに対してロック オブジェクトを使用する場合は、各アイテムに対してロックを使用するか、オブジェクト セット全体に対して 1 つのロックを使用する必要があります (これは大きなボトルネックになる可能性があります)。これは、単一のロックを使用してアクセスを同期する例です。

// You'll need to create this somewhere else, in your constructor
// or some other routine that gets called once.
ReentrantLock lock = new ReentrantLock(); 


// Then when you want to access:
lock.lock();
try {
 ... // do stuff with the data
}
finally {
  lock.unlock();
}
于 2012-05-15T00:08:06.643 に答える
0

私はJavaのWriteReadLockを知らないので、ReadWriteLockについて話していると思います。最初のReadWriteLockは単なるインターフェースです。ReentrantReadWriteLock のような実装をどこかで宣言する必要があります。非排他的な読み取りロックと排他的な書き込みロックを維持するのは、このインスタンスです。

ロック インスタンスは、ランタイムがモニターを取得するものです。実装を見てください。通常の古いwait(), notify(), とnotifyall(). ロック インスタンスを取得するために呼び出します。lock()開始時と完了時に呼び出しunlock()ます。

それに加えて、try-catch-finally でロックを使用し、finally でロックを使用して、unlock何があってもロックが解除されるようにすることをお勧めします。

于 2012-05-14T23:29:08.647 に答える