目次へ

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

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp