Previous | Next | Trail Map | Writing Java Programs | スレッドの制御


スレッドとは何か?

すべてのプログラマは逐次プログラムを作成することに精通している。 恐らく「 Hello World! 」を表示したり、一連の名前をソートしたり、あるいは一連の素数を計算するプログラムを作成したことがあるだろう。 これらは逐次プログラムである。それぞれに、開始、終了、処理があり、プログラム実行中のいかなる一定時間でも、実行項目は1つである。

スレッドは上記で記述された逐次プログラムに類似している。シングルスレッドにも、開始、終了、処理があり、スレッドの実行中のいかなる一定時間でも、実行項目は1つである。 しかし、スレッドそれ自身はプログラムではない。スレッド自身では実行することができないが、プログラム内で実行される。


定義: スレッドはプログラム内における制御の単一な逐次フローである。


シングルスレッドの概念に新しいことは何もない。 スレッドについて実際に騒がれているのは、シングル逐次スレッドについてではなく、どちらかと言うと、ひとつのプログラムの中で、すべて同時に実行され、かつ異なるタスクを実行するマルチスレッドの使用についてである。

HotJava ブラウザはマルチスレッドアプリケーションの例である。HotJava ブラウザ内で、アプレットあるいはイメージをロードしている間にページをスクロールしたり、動画を動かしながら音を出し、新規ページをロードしている間にバックグラウンドでページを印刷したり、あるいは3つの分類アルゴリズムが終了するのを比較しながら観察することができる。 あなたは生活の中で同時に処理することに慣れている...なぜあなたのブラウザでそうしないのか?

テキストによっては、スレッドの代わりにライトウエイトプロセスという呼び名を使用する。 スレッドと実行プログラムが両方とも制御のシングル逐次フローであるという点で、スレッドは本当のプロセスに類似している。 しかし、完全なプログラムのコンテキスト内で実行され、そのプログラムに割り当てられた資源とプログラム環境を利用するので、スレッドはライトウエイトであると考えられている。

制御の逐次フローとして、スレッドは実行中のプログラム内でそれ自身の資源を作り上げなくてはならない(例えば、スレッドはそれ自身の実行スタックとプログラムカウンタを持っていなくてはならない)。 スレッド内で実行するコードはそのコンテキスト内でのみ動作する。 したがって、他のテキストでは、スレッドの同義語として実行コンテキストを使用する。


Previous | Next | Trail Map | Writing Java Programs | Threads of Control