import java.util.*;
// メッセージボックス
class MessageBox{
private String message;
// メッセージボックスにメッセージを入れる
synchronized void messageIn(String msg){
try{
// メッセージがすでに入っていれば、なくなるまで待つ
while( message != null ){
wait();
}
// メッセージを入れる
message = msg;
// メッセージを入れ終わったら別のスレッドを起こす
notifyAll();
// 以下例外処理
}catch(Exception e){
System.err.println("messageIn:Error:"+e);
System.exit(1);
}
}
// メッセージ取りだし
synchronized String messageOut(){
try{
// メッセージがなければ、メッセージが入るまで待つ
while(message == null){
wait();
}
// メッセージ取りだし
String s = message;
message = null;
// 取り出したら別のスレッドを起こす
notifyAll();
return s;
// 以下例外処理
}catch(Exception e){}
System.err.println("messageOut:Error");
System.exit(1);
return "";
}
}
// メッセージを作るスレッド
class MessageSender extends Thread{
public void run(){
for( int i = 0 ; i < 100 ; i++ ){
Test.msgBox.messageIn(""+Math.random());
}
}
}
// メッセージを取り出し、表示するスレッド
class MessageReciever extends Thread{
public void run(){
for( int i = 0 ; i < 100 ; i++ ){
System.out.println(Test.msgBox.messageOut());
}
}
}
class Test{
public static MessageBox msgBox = new MessageBox();
public static void main(String arg[]){
MessageReciever reciever = new MessageReciever();
reciever.start();
MessageSender sender = new MessageSender();
sender.start();
try{
sender.join();
reciever.join();
}catch(Exception e){}
}
}
|