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

