2. スレッドの実行
マルチスレッドプログラミング 2章 スレッドの実行
プログラムの中でスレッドを作成する方法は2つあります。ひとつはjava.lang.Threadクラスを継承(extends)したクラスを作成する方法です。もうひとつはjava.lang.Runnableインタフェースを実装(implements)したクラスを作成する方法です。この章では、それぞれの方法について説明します。 2.1. Threadクラスを継承する方法Threadクラスを継承したクラスを利用して新しいスレッドを実行するには、次のような手順を用います。
この方法を用いたプログラムを見てみましょう。次のプログラムは、3から0まで数字をカウントダウンする処理を2つのスレッドで同時に実行するプログラムです。 リスト CountDownThread.java 1: class CountDownThread extends Thread {
2:
3: private String name;
4:
5: public CountDownThread(String name) {
6: this.name = name;
7: }
8:
9: public void run() {
10: for (int i = 3; i >= 0 ; i--) {
11: try {
12: sleep(1000);
13: } catch (InterruptedException e) {}
14: System.out.println(name + " : " + i);
15: }
16: }
17:
18: public static void main(String[] args) {
19: CountDownThread t1 = new CountDownThread("thread 1");
20: CountDownThread t2 = new CountDownThread("thread 2");
21: t1.start();
22: t2.start();
23: }
24:
25: }
1行目のクラス宣言を見ると、このクラスがThreadクラスを継承していることがわかります。 runメソッドには、新しいスレッドで実行させたい処理を記述します。ここではforループを用いてカウントダウン処理を行っています。なお、runメソッド内で使用しているsleepメソッドは、Threadクラスのstaticメソッドです。sleepメソッドは、現在実行中のスレッドを指定した時間だけ休止させる機能を持ちます。ここでは1回カウントするたびに1000ミリ秒(=1秒)待つように指定しています。 スレッドを利用するためには、スレッドのインスタンスを作成します。19〜20行目で2つのインスタンスを異なる名前で作成しています。 19: CountDownThread t1 = new CountDownThread("thread 1");
20: CountDownThread t2 = new CountDownThread("thread 2");
最後に、21〜22行目でstartメソッドを呼ぶことによりスレッドを起動しています。ここで、runメソッドではなく、startメソッドを呼んでいることに注意してください。runメソッドを呼んでもrunメソッドに記述した処理は実行されますが、通常のメソッド呼び出しと同じで、新しいスレッドは起動されません。startメソッドを呼ぶことによって、新しいスレッドが起動され、その新しいスレッドによってrunメソッドが実行されるのです このプログラムを実行すると次のよう表示されます。作成した2つのスレッドが並行して動作しているのがわかります。 ![]() (実習課題1)以下のプログラムを作成しなさい。
|
![]()
![]()
|