スレッドの作成(Threadクラス)
一つのプログラムにスレッドを複数起動させることで、複数の処理を同時に行わせることができます。
スレッドを起動させるためには、JavaクラスライブラリのThreadクラスを継承する必要があります。
まずはサンプルを記載します。
【実行結果】
Threadクラスを利用して新しいスレッドを作成するために、まずはThreadクラスを継承します。
次にThreadクラスを継承したクラスにrun()メソッドを宣言します。
run()メソッドは特殊なメソッドとなっており、スレッドとして実行したい処理を記述します。
スレッドはインスタンスごとに持つことになります。
ですので、スレッドごとにインスタンスを作成します。
今回の例では「car1」と「car2」の2つのインスタンスを作成しています。
つまり、新しいスレッドを2つ作成していることになります。
これで、スレッドを起動する準備が整いました。
あとは、start()メソッドを呼び出せば新しいスレッドが起動します。
start()メソッドを呼び出すことによりrun()メソッドに記述した処理が実行されます。
ここで注意が必要です。
新しいスレッドとして実行させるためにはrun()メソッドを直接呼び出しても意味をなしません。
run()メソッドを直接呼んでしまうと、それは新しいスレッド上で処理されるのではく、呼び出したスレッド上で処理されてしまい、マルチスレッドにはなりません。
start()メソッドを呼び出すことで、新しいスレッドが起動され、その新しいスレッド上でrun()メソッドが処理されるのです。
スレッドを起動させるためには、JavaクラスライブラリのThreadクラスを継承する必要があります。
まずはサンプルを記載します。
public class CarThread extends Thread{
private String carName;
public CarThread(String carName){
this.carName = carName;
}
public static void main(String[] args){
CarThread car1 = new CarThread("インサイト");
CarThread car2 = new CarThread("プリウス");
car1.start();
car2.start();
}
public void run(){
for(int i = 0; i < 5; i++){
try{
sleep(1000);
}catch(Exception e){}
System.out.println(carName + " : " + i + "回目の処理です。");
}
}
}
【実行結果】
インサイト : 0回目の処理です。
プリウス : 0回目の処理です。
プリウス : 1回目の処理です。
インサイト : 1回目の処理です。
インサイト : 2回目の処理です。
プリウス : 2回目の処理です。
プリウス : 3回目の処理です。
インサイト : 3回目の処理です。
プリウス : 4回目の処理です。
インサイト : 4回目の処理です。
プリウス : 0回目の処理です。
プリウス : 1回目の処理です。
インサイト : 1回目の処理です。
インサイト : 2回目の処理です。
プリウス : 2回目の処理です。
プリウス : 3回目の処理です。
インサイト : 3回目の処理です。
プリウス : 4回目の処理です。
インサイト : 4回目の処理です。
Threadクラスを利用して新しいスレッドを作成するために、まずはThreadクラスを継承します。
public class CarThread extends Thread{
………
}次にThreadクラスを継承したクラスにrun()メソッドを宣言します。
run()メソッドは特殊なメソッドとなっており、スレッドとして実行したい処理を記述します。
public void run(){
for(int i = 0; i < 5; i++){
try{
sleep(1000);
}catch(Exception e){}
System.out.println(carName + " : " + i + "回目の処理です。");
}
}スレッドはインスタンスごとに持つことになります。
ですので、スレッドごとにインスタンスを作成します。
今回の例では「car1」と「car2」の2つのインスタンスを作成しています。
つまり、新しいスレッドを2つ作成していることになります。
CarThread car1 = new CarThread("インサイト");
CarThread car2 = new CarThread("プリウス");これで、スレッドを起動する準備が整いました。
あとは、start()メソッドを呼び出せば新しいスレッドが起動します。
car1.start();
car2.start();
start()メソッドを呼び出すことによりrun()メソッドに記述した処理が実行されます。
ここで注意が必要です。
新しいスレッドとして実行させるためにはrun()メソッドを直接呼び出しても意味をなしません。
run()メソッドを直接呼んでしまうと、それは新しいスレッド上で処理されるのではく、呼び出したスレッド上で処理されてしまい、マルチスレッドにはなりません。
start()メソッドを呼び出すことで、新しいスレッドが起動され、その新しいスレッド上でrun()メソッドが処理されるのです。
