スレッドのテストとプロットの練習
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個をスレッドプールの大きさを変化させて実験してみたので、練習も兼ねてプロットしてみました。