解答例 - 実習課題1 - 2.スレッドの実行
(実習課題1)
以下のプログラムを作成しなさい。
- スレッドの動作スピードを競うコンソールプログラム。実装するスレッドは以下の2つ。
- 与えられたint型の配列を選択ソートするスレッド。
- 与えられたint型の配列をバブルソートするスレッド。
- 2つのスレッドに与えられれるint型の配列は同じものとする。ただし必ずそれぞれのスレッドに対して1つずつ配列を作成する事。配列のサイズと中身のデータは任意とする。
解答例
/**
* BubbleSortThread.java
* TECHSCORE Java マルチスレッドプログラミング2章 実習課題1
*
* Copyright (c) 2004 Four-Dimensional Data, Inc.
*/
package com.techscore.thread.chapter2.exercise1;
public class BubbleSortThread extends Thread {
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;
}
}
/**
* ChoiceSortThread.java
* TECHSCORE Java マルチスレッドプログラミング2章 実習課題1
*
* Copyright (c) 2004 Four-Dimensional Data, Inc.
*/
package com.techscore.thread.chapter2.exercise1;
public class ChoiceSortThread extends Thread {
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章 実習課題1
*
* Copyright (c) 2004 Four-Dimensional Data, Inc.
*/
package com.techscore.thread.chapter2.exercise1;
import java.util.Random;
public class ThreadSpeadExample {
public static final int LENGTH = 20000;
public static void main(String[] args) {
//選択ソートスレッド
ChoiceSortThread choice = new ChoiceSortThread();
//バブルソートスレッド
BubbleSortThread bubble = new BubbleSortThread();
//同じ値を持つ配列を作る
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);
//よーい、どん!
bubble.start();
choice.start();
}
}

