解答例 - 実習課題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();
}
}

