クライアントには、一定の間隔でアラームをスケジュールするScheduler
というクラスが用意されています。これを行うには、プライオリティキューにアラームを追加するクラスにsetAlarm
というメソッドがあり、Timer
プロシージャに、キューの上にあるものを起床して処理する時間を知るようにするには、notify()
を実行します。以下は複数のスレッドはインスタンスへの参照をどのように維持できますか?
それが通知を受信したり、時間までのアップになるまでそれがお待ちしておりますので、今私は、別のスレッドで実行するようにTimer
手順が必要になる基本的なインプリメンテーション
class Scheduler {
synchronized public void setAlarm(Date date) {
notify();
}
synchronized private void alarmTimer() {
while (true) {
wait();
System.out.println("Alarm Triggered");
}
}
の一例です。しかし、クライアントには2つのスレッドがあることに気付かないといけません。クライアント側では、schedulerInstance.setAlarm(myDate)
を処理して処理する必要があります。
したがって、Scheduler
はalarmTimer()
のために別のスレッドを作成する必要があります。右のthis
オブジェクトを参照しながら、この新しいスレッドからalarmTimerを呼び出す方法はありますか? wait()
とnotify()
が動作するように、元のScheduler
インスタンスへの参照を複数のスレッドで保持したい状況を処理する正しい方法は何ですか?
Java 5以降では、['ScheduledExecutorService'](https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html)があります。仕事に使う。 – alfasin