締切駆動型人間の日常

間違ってたら教えてくだしゃい

スレッドのテストとプロットの練習

javaのマルチスレッドの練習をしてみました。
ほぼマルチスレッドプログラムサンプル - asakawajunyaの日記からの写経です。
ソースコード

import java.util.Random;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;



public class Test {
	
	public static void main(String[] args){
		
		long startTime = System.currentTimeMillis();

		// 最大で5つのスレッドを起動する
		ScheduledExecutorService service = Executors.newScheduledThreadPool(1);
		
		// 別スレッドで処理する内容
		class Process implements Runnable{
			private int index = 0;
			private int i = 0;
			
			public Process(int index, int i){
				this.index = index;
				this.i = i;
			}
			
			public void run(){
				try {
					System.out.println(Thread.currentThread().getName() + ":" + this.index);
					Thread.sleep(1000 * this.i);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}

		Random random = new Random();
		for(int i=0; i<100; i++){
			service.submit(new Process(i, random.nextInt(10)));
		}
		
		// 処理が完了したらスレッドを終了する
		service.shutdown();
		
		// すべてのスレッドが終了するまで待つ
		while(!service.isTerminated()){
			try{
				System.out.println("Shutdown...");
				Thread.sleep(1000);
			}catch(InterruptedException e){
				e.printStackTrace();
			}
		}
		System.out.println("end");
		
		System.out.println("Experiment Time:" + (System.currentTimeMillis() - startTime) / 1000);
	}
}


ついでにスレッド100個をスレッドプールの大きさを変化させて実験してみたので、練習も兼ねてプロットしてみました。

f:id:zeroplanet:20150712042825p:plain