Java スレッド

スレッドとは、プログラム内で実行される、単独の独立したストリームのことを言います。 Java™ はマルチスレッド・プログラミング言語であるため、Java 仮想マシン内では、一度の複数のスレッドを実行することができます。 Java スレッドは、Java プログラムが同時に複数のタスクを実行するための手段として使用されます。 スレッドは、本質的にプログラム内の制御のフローです。

スレッドは、並行プログラムをサポートし、アプリケーションのパフォーマンスとスケーラビリティーを向上させるのに使用される、現代的なプログラミング構成要素です。 ほとんどのプログラミング言語では、アドイン・プログラミング・ライブラリーを使用することによってスレッドをサポートします。 Java の場合は、組み込みアプリケーション・プログラミング・インターフェース (API) として、スレッドをサポートしています。

注: スレッドを使用すると、より多くのタスクが並行して実行されるため、対話性の向上、つまりキーボードでの待機時間の短縮がサポートされます。 ただし、プログラムの対話機能は、必ずしもスレッドがあるというだけで向上するとは限りません。

スレッドは、実行時間の長い対話で待機しながら、プログラムがなおその他の作業も処理できるようにするためのメカニズムです。 スレッドを使用すると、同じコード・ストリームの中で複数のフローをサポートすることができます。 これは、軽量プロセスと呼ばれることもあります。 Java 言語には、スレッドの直接サポートも組み込まれています。 しかし、設計上、割り込みや複数の待ちがある非同期で非ブロッキングの入出力は、サポートされていません。

スレッドを使用すると、マシンに複数のプロセッサーがある環境に適した、並列プログラムを作成できます。 これは、適切に構成されれば、複数のトランザクションやユーザーの処理のためのモデルともなります。

Java プログラムのスレッドは、さまざまな状況で使用できます。 プログラムの中には、複数のアクティビティーに携わることができなければならず、なおかつユーザーからのさらに別の入力にも応答できなければならないものがあります。 例えば、Web ブラウザーには、音声を再生しながらユーザーの入力に応答する能力が求められるでしょう。

スレッドでは、非同期メソッドを使用することもできます。 2 つ目のメソッドを呼び出したときに、1 つ目のメソッドが完了するまで 2 つ目のメソッドが自身のアクティビティーを続けるのを待つ必要はありません。

ただし、スレッドを使用しないほうが良い場合もたくさんあります。 階層的な順次の論理が使用されるプログラムでは、1 つのスレッドでシーケンス全体を完了させることができます。 このようなケースでは、複数のスレッドを使用してもプログラムが複雑になるだけで、何の益もありません。 スレッドの作成と開始には、かなりの作業が伴います。 操作に関係するステートメントが 2 つか 3 つしかないのであれば、それは 1 つのスレッドで扱った方が速いでしょう。 これは、その操作が概念的に非同期である場合でもそういえます。 複数のスレッドがオブジェクトを共用すると、オブジェクトには、スレッド・アクセスを調整し、整合性を保守するための同期化が必要になります。 同期化を行うとなれば、プログラムはそれだけ複雑になり、パフォーマンスを最適化するための調整を難しくしたり、プログラミングのソースにエラーを引き起こしてしまう可能性があります。

スレッドについての詳細は、マルチスレッド・アプリケーションの作成を参照してください。