EeBlog(テクニカルブログ)

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

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

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

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

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

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

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

(さらに…)

第52回 シンクロナイザ編 Semaphore

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

セマフォとは複数のプロセスが共有資源を利用する際に、その資源に同時にアクセスされるのを防ぐために使用される排他制御方法です。 1つのプロセスのみがアクセスできる2値セマフォと、複数のプロセスがアクセスできる計数セマフォがあります。 Semaphoreは同時に実行できるスレッドの数を制限する計数セマフォです。 acquire メソッドは実行権を取得するメソッドです。 実行可能数のスレッドがacquire メソッドを実行している場合において他のスレッドがacquire メソッドを実行するとブロックされます。 releaseメソッドは実行権を返却するメソッドです。 また、Semaphoreのコンストラクタの第2引数は公平性を設定します。 公平性が true に設定されると、acquire メソッドを実行したスレッドがその実行順で実行権を取得すること保証します。

(さらに…)