解答例 - 実習課題2 - 2.スレッドの実行
(実習課題2)
実習課題1のプログラムを改良しなさい。
- 「Thread」クラスを拡張している部分を、「Runnable」インタフェースを実装するように変える事。
解答例
/** * BubbleSortImp.java * TECHSCORE Java マルチスレッドプログラミング2章 実習課題2 * * Copyright (c) 2004 Four-Dimensional Data, Inc. */ package com.techscore.thread.chapter2.exercise2; public class BubbleSortImp implements Runnable { private int[] array = new int[ThreadSpeadExample.LENGTH]; public void run() { System.out.println("バブルソート開始"); for (int i = 0; i < array.length; i++) { for (int j = 0; j < array.length - i - 1; j++) { if (array[j] > array[j + 1]) { int tmp = array[j]; array[j] = array[j + 1]; array[j + 1] = tmp; } } } System.out.println("バブルソート終了"); } public void setArray(int[] array) { this.array = array; } }
/** * ChoiceSortImp.java * TECHSCORE Java マルチスレッドプログラミング2章 実習課題2 * * Copyright (c) 2004 Four-Dimensional Data, Inc. */ package com.techscore.thread.chapter2.exercise2; public class ChoiceSortImp implements Runnable { private int[] array = new int[ThreadSpeadExample.LENGTH]; public void run() { System.out.println("選択ソート開始"); for (int i = 0; i < array.length; i++) { int min = i; for (int j = i + 1; j < array.length; j++) { if (array[min] > array[j]) { min = j; } } if (min != i) { int tmp = array[i]; array[i] = array[min]; array[min] = tmp; } } System.out.println("選択ソート終了"); } public void setArray(int[] array) { this.array = array; } }
/** * ThreadSpeadExample.java * TECHSCORE Java マルチスレッドプログラミング2章 実習課題2 * * Copyright (c) 2004 Four-Dimensional Data, Inc. */ package com.techscore.thread.chapter2.exercise2; import java.util.Random; public class ThreadSpeadExample { public static final int LENGTH = 20000; public static void main(String[] args) { ChoiceSortImp choice = new ChoiceSortImp(); BubbleSortImp bubble = new BubbleSortImp(); //選択ソートスレッド Thread choiceThread = new Thread(choice); //バブルソートスレッド Thread bubbleThread = new Thread(bubble); //同じ値を持つ配列を作る int[] array1 = new int[LENGTH]; int[] array2 = new int[LENGTH]; for (int i = 0; i < LENGTH; i++) { array1[i] = new Random().nextInt(1000); //1000以下のランダムな値を代入 array2[i] = array1[i]; //同じ値をarray2にも代入 } //配列をセットする choice.setArray(array1); bubble.setArray(array2); //よーい、どん! bubbleThread.start(); choiceThread.start(); } }