/*
* 練習問題14.6 p.311
* 15秒間隔でメッセージを表示する別のスレッドを持ち、実行開始からの経過時間を表示するプログラムを作成しなさい。
* メッセージ表示スレッドは、時間表示スレッドから1秒経過する毎に通知されるようにしなさい。
* 時間表示スレッドを修正することなく、7秒間隔で異なるメッセージを表示する別のスレッドを追加しなさい。
*/
package ch14.ex14_06;
import java.util.Date;
public class ShowTime implements Runnable
{
long currentTime = 0;
long showedTime = 0;
long elapsedTime = 0;
public ShowTime()
{
currentTime = new Date().getTime();
}
public void run()
{
while (true)
{
showTime();
}
}
public synchronized void showTime()
{
// synchronized (this)
{
currentTime = new Date().getTime();
if (currentTime - showedTime > 1000)
{
showedTime = currentTime;
elapsedTime = elapsedTime + 1000;
System.out.println(elapsedTime / 1000
+ " seconds have elapsed. ");
notifyAll();
}
}
}
public synchronized long showMessage(long messageInterval, String message, long showedTime) throws InterruptedException
{
while ((new Date().getTime() - showedTime) < messageInterval)
{
wait();
}
System.out.println(message);
return (new Date().getTime());
}
/**
* @param args
*/
public static void main(String[] args)
{
ShowTime testShowTime = new ShowTime();
Thread testThreadShowTime = new Thread(testShowTime);
testThreadShowTime.start();
ShowMessage testShowMessage15 = new ShowMessage(testShowTime, 15 * 1000, "message per 15 seconds");
Thread testThreadShowMessage15 = new Thread(testShowMessage15);
testThreadShowMessage15.start();
ShowMessage testShowMessage7 = new ShowMessage(testShowTime, 7 * 1000, "message per 7 seconds");
Thread testThreadShowMessage7 = new Thread(testShowMessage7);
testThreadShowMessage7.start();
}
}