スレッドとは

広告

まずはスレッドとは何かから確認していきましょう。(多少なりとも分かりやすいように変な例え話で書いています。一部正確でないところもあるかもしれませんがご容赦下さい)。

Javaのプログラムでは、プログラムを記述した順に1つ1つ実行されていきます。これはプログラムを実行してくれる職人のような人がコンピューターの中に一人いて、順に処理をしてくれているようなものです。通常職人さんは一人だけいるので、同時に2つのことは出来ません。1つ1つ順番に処理するだけです。

ただJavaではプログラムを実行する人を増やすことが出来ます。もともといた職人さんとは別に、別の職人さんを追加して、同時に別のことを行わせることが出来ます。この職人さんのことをスレッドといいます。通常は一人だけいるのでシングルスレッドですが、複数の職人さんを使う場合をマルチスレッドといいます。

Javaアプリケーションの場合は、プログラムを実行すると職人さんが一人出てきて順に仕事をこなしていきます。職人さんを雇っているのがJavaアプリケーションというわけです。ではアプレットの場合はどうかといいますと、アプレットはアプレットが動作しているブラウザやアプレットビューアーの中の一部分にすぎません。つまりメインとして動いているアプリケーションはブラウザの方になるわけで、ブラウザが職人を雇って仕事をさせているわけです。そしてアプレットで何か作業が必要になった時、一時的に職人さんを貸してくれて処理を実行してくれます。

ではアプレットで無限にアニメーションを行わせるような動作をさせたらどうなるかを考えて見てください。本来ブラウザの方の仕事をメインに行っている職人さんをアプレットの方でずっと使い続けているわけです。本来アプレットはブラウザから必要な時だけ呼び出される一部分のはずなのに、ずっとアプレットの方で職人を捕まえてしまっていると、ブラウザの方の処理がまったく出来なくなり非常に困った状態となります。

そこで、アプレットが最初に呼び出された時に、アプレットのことだけを行う別の職人を一人作成します。アプレットを最初に作業をしにきた職人は、すぐにブラウザの方へ返してあげて、今後のアプレットの処理は別に雇ったアプレット用の職人を使うわけです。こうすればブラウザの方にも迷惑をかけず、アプレットの方で好きなように職人を使ってプログラムを実行することが出来ます。

長々とくだらない例え話を書きましたが、アプレットにて絵を描いて終わりといった単純な1回限りの処理を行うのではなく、繰り返し画像を切り替えたりだとか、ゲームを動かすといった延々と処理を行うような作業をする場合には、別のスレッドを一つ作成して、そのスレッドに処理を行わせる方法を取ります。

スレッドはいくつでも作成できるので、同時にどれだけの処理を行わせる事も出来ます。とは言ってもコンピュータのCPUが複数あるのでもなければ、実際には同時に複数のことを行わせる事は出来ないので、擬似的に同時処理を行います。例えば0.1秒毎に動かすスレッドを切り替えて、あたかも同時に複数のスレッドが動いているように見せかけるわけです。

では次からJavaでスレッドをどのように使うのかを確認していきます。

( Written by Tatsuo Ikura )