目次へ

解答例 - 実習課題1 - 5.スレッドの同期

(実習課題1)

以下のコンソールプログラムを作成しなさい。

  • ファイルをコピーするプログラム。ファイル内容を一旦プログラムに全て読み込んでから、書き込みを行うようにする事。
  • 3つのスレッドに分けること。
    • 進行状況を表示するスレッド
    • ファイルの内容を読み込むスレッド
    • ファイルの内容を書き出すスレッド

解答例

/**
 * FileCopyExample.java
 * TECHSCORE Java マルチスレッドプログラミング5章 実習課題1 
 *
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */

package com.techscore.thread.chapter5.exercise1;

public class FileCopyExample implements Runnable {

    public static void main(String[] args) {
        FileCopyExample manager = new FileCopyExample();
        Thread managerThread = new Thread(manager);
        managerThread.start();
    }

    public void run() {
        System.out.println("ファイルをコピーします");
        ReadImp reader = new ReadImp();
        WriteImp writer = new WriteImp();
        Thread readerThread = new Thread(reader);
        Thread writerThread = new Thread(writer);

        readerThread.start();
        try {
            System.out.println("読み込み開始");
            readerThread.join();
            System.out.println("読み込み完了");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //読み込んだデータを渡す
        writer.setText(reader.getText());

        writerThread.start();
        try {
            System.out.println("書き込み開始");
            readerThread.join();
            System.out.println("書き込み完了");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("ファイルをコピーしました");
    }
}
/**
 * ReadImp.java
 * TECHSCORE Java マルチスレッドプログラミング5章 実習課題1 
 *
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */

package com.techscore.thread.chapter5.exercise1;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class ReadImp implements Runnable {
    private String text = null;

    public void run() {
        try {
            BufferedReader reader = new BufferedReader(new FileReader("input.txt"));
            String line;
            StringBuffer tmp = new StringBuffer();
            while ((line = reader.readLine()) != null) {
                tmp.append(line);
            }
            reader.close();
            text = tmp.toString();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public String getText() {
        return text;
    }

}
/**
 * WriteImp.java
 * TECHSCORE Java マルチスレッドプログラミング5章 実習課題1 
 *
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */

package com.techscore.thread.chapter5.exercise1;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class WriteImp implements Runnable {

    private String text = null;

    public void run() {
        try {
            BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"));
            writer.write(text);
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public void setText(String string) {
        text = string;
    }

}

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp