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

第58回 Swingのスレッドポリシー

今回のテーマは「Swingのスレッドポリシー」です。

今回はSwingアプリケーションを実装するうえで知っておくべきスレッドポリシーについて書きます。 通常のSwingアプリケーションは、ユーザーのジェスチャーによって生成されたイベントに応じて、処理を実行します。 すべてのイベントはイベントディスパッチスレッドという1つのスレッド上で実行されます。したがって、イベントディスパッチスレッド上でイベント処理が実行中の場合、ほかのイベントは受け付けません。 このような仕様になっているのはSwingがスレッドセーフではないからです。

(さらに…)

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

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

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

(さらに…)

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

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

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

(さらに…)