次のコードは、Peter C. Dibble による Real-Time Java Platform Programming の例を基にしています。
import javax.realtime.*;
public class OSTimer {
static volatile boolean cont = true;
public static void main(String[] args) {
AsyncEventHandler handler = new AsyncEventHandler(){
public void handleAsyncEvent() {
System.out.println("Stopping...");
cont = false;
}
}
};
OneShotTimer timer = new OneShotTimer(new RelativeTime(3000, 0), handler);
timer.start();
while(cont){
System.out.println("Running");
if (timer.isRunning()) System.out.println("Timer is running");
try {
Thread.sleep(1000);
} catch(Exception e) { }
}
System.exit(0);
}
プログラムは 3 秒間実行してから終了することになっています。ただし、出力は、タイマーが 3 秒後に実際に停止したことを示していますが、プログラムは通常どおり続行されます。つまり、出力は次のようになります。
Running
Timer is running
Running
Timer is running
Running
Timer is running
Running
Running
Running......
明らかにハンドラーが起動しませんでした。その理由はわかりません。ハンドラーをトリガーする定期的なタイマーを含む別のサンプル プログラムは、期待どおりに動作します。プログラムの構成はこちらとほぼ同じです。