では、ReadWriteLockのサンプル。 読み込みスレッドは互いにロックせず、書き込みスレッドは他のスレッドとは同時に動かせない、というロックです。 サンプルでは、「か電車」が書き込みスレッド、「電車」が読み込みスレッドです。「か電車」が動くときには他のスレッドは動けません。 ReadWriteLockの実装としては、再入可能なReentrantReadWriteLockが用意されているので、これを使います。 ReadWriteLock lock = new ReentrantReadWriteLock(); 実際にロックするときは、ReadWriteLockオブジェクトからwriteLock/readLockメソッドで書き込み用ロックか読み込み用ロックを取得します。 Lock reallock = writer ? lock.writeLock() : lock.readLock()