ReadWriteLockのサンプル

では、ReadWriteLockのサンプル。
読み込みスレッドは互いにロックせず、書き込みスレッドは他のスレッドとは同時に動かせない、というロックです。
サンプルでは、「か電車」が書き込みスレッド、「電車」が読み込みスレッドです。「か電車」が動くときには他のスレッドは動けません。


ReadWriteLockの実装としては、再入可能なReentrantReadWriteLockが用意されているので、これを使います。

ReadWriteLock lock = new ReentrantReadWriteLock();


実際にロックするときは、ReadWriteLockオブジェクトからwriteLock/readLockメソッドで書き込み用ロックか読み込み用ロックを取得します。

Lock reallock = writer ? lock.writeLock() : lock.readLock();


そうやって取得したロックを、通常のLockオブジェクトと同様にlock/unlockします。

reallock.lock();
reallock.unlock();


ということで、ソース

続きを読む