0

以下のように機能する必要がある2つのメソッドがあります。

method1 {
  1. run logic and insert into table1
}

method2 {
  1. wait till other threads finish method1
  2. block future threads from starting method1
  3. update table1
}

最も簡単な解決策は、method1 と method2 の両方を同期することです。もう 1 つの考慮事項は、method1 は複数のスレッド (>10) から呼び出すことができ、一般的な操作であるのに対し、method2 はほとんど呼び出されないことです。そのため、方法 1 を同期すると、マルチプロセッシング機能が大幅に妨げられます。

メソッド 1 で readLock を使用し、メソッド 2 で writeLock を使用して、ReadWriteLock を使用する可能性を探りました。しかし、それはメソッド 2 の #1 では役に立ちません。メソッド 2 で writeLock を取得した後、メソッド 2 に進む前にメソッド 1 で実行中のスレッドを完了させたいと考えています。

4

1 に答える 1

2

これは の古典的な使い方ですReadWriteLock

ReadWriteLock を使用した Java 同時実行を参照してください。

読み取りロックは、ライターがない限り、複数のリーダー スレッドによって同時に保持される場合があります。書き込みロックは排他的です。

そのため、#1 で書き込みロックを要求すると、ロックを取得して戻る前に、method2呼び出しによってすべての読み取りロックが解放されるまで待機します。method1

書き込みロックを取得すると、基本的に の #1 と #2 の両方が実行されmethod2ます。

于 2013-09-20T10:59:00.270 に答える