alphaのjava備忘録

alphaが勉強したことを書いていくブログ

Threadの配列を作るには

Threadを大量に作成するにはどうしたらいいだろう?今まではスレッドを作成するごとにインスタンスをnewしてきた。この方法だと10個のスレッドを使用する場合、10回newを書く必要がある。変数も10個用意してstart()メソッドも10回書く必要がある。

class Thread1 extends Thread{
	public void run(){
		System.out.println("Thread 1 moved.");
	}
}

class Main{
	public static void main(String[] args){
		Thread1 th1 = new Thread1();
		th1.start();
	}
}


多くのスレッドを立てて並列処理を行うことこそがThreadを使う理由である。となるとこれ以外にも沢山のスレッドを一度に作成する方法があった方がいい。それで今回は配列を使用してThreadを扱う方法を学ぼうと思う。具体的には上記のスレッドを100回立てるソースを書いてみる。


ポイント

  ・Thread型の配列を事前に必要スレッド数だけ宣言する。
  ・Thread型の配列への値の格納、及び格納するインスタンスのnewはfor文中で行う。(×100回)
  ・100個作成したインスタンスは100回start()メソッドを実行する必要がある。
  ・start()メソッドも別途for文を書いてfor文中で行う。
    (こちらはThread配列を繰返処理するので拡張for文でOK)
class Thread1 extends Thread{
	public void run(){
		System.out.println("Thread 1 moved.");
	}
}

class Main{
	public static void main(String[] args){
		Thread[] th = new Thread[100];
		for(int i=0;i<100;i++){
		th[i] = new Thread1();
		}		
		for(Thread t:th){
			t.start();
		}
	}
}

(1) Thread型配列thを定義。要素数=100。
(2) for文で 100回Thread1クラスのインスタンスをnew。
(3) Thread1クラスのインスタンスをth[i] に格納。
(4) 拡張for文で配列thに含まれる100個のインスタンスでstart()メソッドを実行。
(5) 100回分の"Thread 1 moved." がコンソールに出力される。

実行結果
Thread 1 moved.
Thread 1 moved.
Thread 1 moved.
Thread 1 moved.
Thread 1 moved.
Thread 1 moved.
(以下100個目の出力まで略)

無事100個スレッドを実行できた。