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