スレッド

SwingWorkerでスレッドからGUI操作

EventQueue#invokeLaterなどを使えということなのですが、実際の処理をいちいちinvokeLaterすると処理の記述が分断して大変みにくくなります。記述の美しさよりも処理の安全さ、とはいえ、これはあんまり。 ということで、Java SE 6からはSwingWorkerという…

正しいスレッドプログラム

ここまでスレッドのサンプルを書いてきたのですが、主にプログラムがみにくくなるとか、めんどいとか、動くからえぇやんという理由で、やるべきことをやってないところがあります。 スレッドからのSwing操作とwaitの処理です。 Swingはシングルスレッドモデ…

Lock/Conditionのサンプル

追記:「見せかけの起動」に対応しました。2008/12/6 http://d.hatena.ne.jp/nowokay/20081206#1228542137 wait/notifyでスレッド間の同期を行ったのですが、wait/notifyは対象オブジェクトでsynchronizedする必要がありました。 ということは、逆にいうとsy…

wait/notify/interruptのサンプル

追記:「スプリアスウェイクアップ」に対応しました。2008/12/6 http://d.hatena.ne.jp/nowokay/20081206#1228542137 ここまで、いろいろなロックを扱ったのですが、スレッド間での実行の制御も必要になります。 Javaでは、スレッド間の実行の制御にwait/not…

殺伐としたプログラム

@daichan4649に「殺伐としたプログラムしか見ていないのでいつも癒されます」と言われたのだけど、「殺伐としたプログラム」ってどんなのだろう? こうですか?わかりません >< lockしたらunlockしません。早い者勝ち ソースはこれ

Lockのサンプル

Javaの同期の基本はsynchronizedなのだけど、synchronizedはブロックとして使わないといけないので使いづらい場合がある。ロックの取得と開放を同じメソッド内で行わなくてはいけないし、異なるロックを自由なタイミングで取得開放できない。 そこで使うのが…

ReadWriteLockのサンプル

では、ReadWriteLockのサンプル。 読み込みスレッドは互いにロックせず、書き込みスレッドは他のスレッドとは同時に動かせない、というロックです。 サンプルでは、「か電車」が書き込みスレッド、「電車」が読み込みスレッドです。「か電車」が動くときには…

CyclicBarrierのサンプル

こないだのときは説明できなかったけど、CyclicBarrier いくつかのスレッドがバリアにたどりつくまで待ちます。 このサンプルではスピードの違う「電車」がまんなかで全ての「電車」がそろうまで待ちます。 コンストラクタでいくつのスレッドを待つかを決め…

Semaphoreのサンプル

こないだのスレッド入門のときに見せてたサンプル。 ブログ用に再構成。「電車」が3つずつ動きます。 Semaphoreは、同時に実行できるスレッド数を制限できます。 このサンプルでは3つに制限しています。 static Semaphore semaphoe = new Semaphore(3); セマ…