EventDispatchThreadとは
Swingはスレッドセーフではないため、Swingのコンポーネントの操作は一つのスレッド上で行うことになっている。そのスレッドがEventDispatchThread(EDT)である。Swingコンポーネントからイベントが発生すると、キュー(EvevtQueue)に追加され、EDTはそれを古いものから順に処理していく。actionPerformedの処理も同じEDT上で動作する。しかし、その処理で特に重い処理の場合、Swingに関わりが無ければ別なスレッド上で処理を行う方が効率的である。その処理が終わった時点で処理をEDTに渡すこともできる。そのときに便利なのが、
SwingUtility.invokeLater(Runnable)
で、
SwingUtility.isEventDispatchThread()
は、今のスレッドがEDTかどうかを調べるときに使われる。
Java6では、SwingWorkerクラスで、
doInBackGroud
メソッド内で、通常のThread処理を記述し、
done
メソッド内で、EDTの処理を記述することで、分かりやすく記述することができる。
Conncurentについてはまだ良くわかってないので書けません。