EeBlog(テクニカルブログ) :Javaワンポイント

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

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

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

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

第54回 ロック編 synchronizedによるロック

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

Javaのオブジェクトにはロックが1つ用意されています。 スレッドはsynchronizedメソッドまたはsynchronized文を実行する場合に、そのオブジェクトのロックを取得しようとします。 スレッドがロックを取得しようとする場合において、他のスレッドがそのロックを取得しているときは、ロック待ちの状態になります。 したがって、1度に同じオブジェクトのsynchronizedメソッドまたはsynchronized文の処理を実行できるのは1つのスレッドのみです。 このような排他処理において、他のスレッドの排他処理を待つといったことを実現するために、waitメソッド、notifyメソッド、notifyAllメソッドがあります。 (さらに…)

第53回 シンクロナイザ編 Exchanger

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

Exchangerはスレッドをペアにして、ペア内の要素を交換することができます。

次のサンプルコードはスレッド間でインスタンスを交換するプログラムです。(J2SE5.0以上対応)

(さらに…)