import java.io.*;
import java.util.*;
class Test{
public static void main(String args[]){
MessageReciever reciever = new MessageReciever();
MessageSender sender = new MessageSender(reciever);
reciever.start();
sender.start();
try{
sender.join();
reciever.join();
}catch(Exception e){}
}
}
import java.io.*;
import java.util.*;
// メッセージを送信するスレッド
public class MessageSender extends Thread{
private DataOutputStream outStream;
private PipedOutputStream outPipedStream;
private PipedInputStream inPipedStream;
private Random rnd;
private static String msg[] = {
"おはようございます",
"こんにちは",
"こんばんは",
"おやすみなさい",
"仕事ですよ",
"電話ですよ",
"終了" };
// コンストラクタ
public MessageSender(MessageReciever reciever){
try{
inPipedStream = reciever.getPipedInputStream();
// PipedOutputStreamストリームを作成し、PipedIntputStreamとつなげる
outPipedStream = new PipedOutputStream(inPipedStream);
// DataOutputStreamを作り、PipedOutputStreamとつなげる。
outStream = new DataOutputStream(outPipedStream);
}catch(Exception e){
e.printStackTrace();
}
// メッセージ作成用Random作成
rnd = new Random();
}
// ストリームをクローズ
public void close(){
if( outStream != null ){
try{
outStream.close();
}catch(Exception e){
e.printStackTrace();
}
}
outStream = null;
}
// メッセージを送信するスレッド
public void run(){
boolean flag = true;
try{
while( flag ){
String str = msg[ Math.abs(rnd.nextInt() % msg.length) ];
// メッセージ送信
outStream.writeUTF( str );
// 次のメッセージまで少し休む
sleep(Math.abs(rnd.nextInt() % 500));
// 終了メッセージか?
if( str.equals("終了") )
flag = false;
}
}catch(Exception e){
e.printStackTrace();
}
// ストリームをクローズ
close();
}
}
import java.io.*;
import java.util.*;
// メッセージを取り出し、表示するスレッド
public class MessageReciever extends Thread{
private PipedInputStream inPipedStream;
private DataInputStream inStream;
// コンストラクタ
public MessageReciever(){
// PipedInputStreamを作り、DataInputStreamにつなげる
inPipedStream = new PipedInputStream();
inStream = new DataInputStream(inPipedStream);
}
// DataInputStreamのアクセスメソッド
public PipedInputStream getPipedInputStream(){
return inPipedStream;
}
// ストリームをクローズ
public void close(){
if( inStream != null ){
try{
inStream.close();
}catch(Exception e){
System.err.println(e);
e.printStackTrace();
}
}
inStream = null;
}
// メッセージを受け取るスレッド
// メッセージがない場合は、メッセージが来るまで待っている。
public void run(){
boolean flag = true;
try{
while( flag ){
String str = inStream.readUTF();
System.out.println( str );
if( str.equals("終了") )
flag = false;
}
}catch(Exception e){
System.err.println(e);
e.printStackTrace();
}
// ストリームをクローズ
close();
}
}
|