JAVAスレッド
スレッドとは、プログラム内で実行される、単独の独立したストリームのことを言います。 Java™ はマルチスレッド・プログラミング言語であるため、一度に複数のスレッドが Java 仮想マシン内で実行される可能性があります。 Java スレッドは、Java プログラムが複数のタスクを同時に実行する方法を提供します。 スレッドは、本質的にプログラム内の制御のフローです。
スレッドは、並行プログラムをサポートし、アプリケーションのパフォーマンスとスケーラビリティーを向上させるのに使用される、現代的なプログラミング構成要素です。 ほとんどのプログラミング言語では、アドイン・プログラミング・ライブラリーを使用することによってスレッドをサポートします。 Java は、組み込みアプリケーション・プログラミング・インターフェース (API) としてスレッドをサポートします。
スレッドは、実行時間の長い対話で待機しながら、プログラムがなおその他の作業も処理できるようにするためのメカニズムです。 スレッドを使用すると、同じコード・ストリームの中で複数のフローをサポートすることができます。 これは、軽量プロセスと呼ばれることもあります。 Java 言語には、スレッドの直接サポートが含まれています。 しかし、設計上、割り込みや複数の待ちがある非同期で非ブロッキングの入出力は、サポートされていません。
スレッドを使用すると、マシンに複数のプロセッサーがある環境に適した、並列プログラムを作成できます。 これは、適切に構成されれば、複数のトランザクションやユーザーの処理のためのモデルともなります。
Java プログラムでは、さまざまな状況でスレッドを使用できます。 プログラムの中には、複数のアクティビティーに携わることができなければならず、なおかつユーザーからのさらに別の入力にも応答できなければならないものがあります。 例えば、Web ブラウザーには、音声を再生しながらユーザーの入力に応答する能力が求められるでしょう。
スレッドでは、非同期メソッドを使用することもできます。 2 つ目のメソッドを呼び出したときに、1 つ目のメソッドが完了するまで 2 つ目のメソッドが自身のアクティビティーを続けるのを待つ必要はありません。
ただし、スレッドを使用しないほうが良い場合もたくさんあります。 階層的な順次の論理が使用されるプログラムでは、1 つのスレッドでシーケンス全体を完了させることができます。 このようなケースでは、複数のスレッドを使用してもプログラムが複雑になるだけで、何の益もありません。 スレッドの作成と開始には、かなりの作業が伴います。 操作に関係するステートメントが 2 つか 3 つしかないのであれば、それは 1 つのスレッドで扱った方が速いでしょう。 これは、その操作が概念的に非同期である場合でもそういえます。 複数のスレッドがオブジェクトを共用すると、オブジェクトには、スレッド・アクセスを調整し、整合性を保守するための同期化が必要になります。 同期化を行うとなれば、プログラムはそれだけ複雑になり、パフォーマンスを最適化するための調整を難しくしたり、プログラミングのソースにエラーを引き起こしてしまう可能性があります。
スレッドについて詳しくは、『マルチスレッド・アプリケーションの開発』を参照してください。