EeBlog(テクニカルブログ)

第57回 ロック編 ReadWriteLockインターフェース

今回のテーマは「ReadWriteLock」です。

ReadWriteLockインターフェースを実装するReentrantReadWriteLockは読み込み用のLockと書き込み用のLockをサポートします。 読み込みロックはreadLockメソッドにより取得し、書き込みロックはwriteLockメソッドにより取得します。 このロックには以下の特徴があります。 読み込みロックは複数のスレッドが取得できる。 書き込みロックは1つのスレッドのみが取得できる。 読み込みロックの取得中は、他のスレッドは書き込みロックを取得できない。 書き込みロックの取得中は、他のスレッドは読み込みロックを取得できない。

(さらに…)

第56回 ロック編 Conditionインターフェース

今回のテーマは「Condition」です。

前々回はsynchronizedによる排他制御と、waitメソッド、notifyAllメソッドによるスレッドの待ち合わせについて書きました。 notfiyAllメソッドを使用したのは、特定の状態で待機したスレッドのみを再開する術がないからです。 そのため、再開しなくてもよいスレッドが再開してしまう可能性がありました。 しかし、Lockによる排他制御を行う場合、Connditionにより状態を区別し、特定の状態で待機したスレッドのみを再開することができます。 Conditionインスタンスは、内在的にLockにバインドされており、newConditionメソッドで取得します。

(さらに…)

第55回 ロック編 Lockインターフェース

今回のテーマは「Lock」です。

synchronizedによるオブジェクトのロックのほかに、Lockインターフェースを利用し、より柔軟な排他制御を行うことができます。 Lockインターフェースを実装するクラスにはReentrantLockなどがあります。 lockメソッドによりロックを取得し、unlockメソッドによりロックを開放します。 通常はlockメソッドの実行直後にtryブロックを続け、finallyブロックでunlockメソッドを実行します。

次のサンプルコードは数値を格納するリストクラスです。 内部で奇数と偶数を区別して保持します。(J2SE5.0以上対応) (さらに…)