【发布时间】:2017-10-24 03:06:23
【问题描述】:
客户端会看到一个名为Scheduler 的类,它会在特定时间间隔安排警报。为此,我在类中有一个方法setAlarm,它将警报添加到优先队列并执行notify() 以让Timer 过程知道是时候唤醒并处理队列顶部的内容了。
下面是一个基本实现的例子-
class Scheduler {
synchronized public void setAlarm(Date date) {
notify();
}
synchronized private void alarmTimer() {
while (true) {
wait();
System.out.println("Alarm Triggered");
}
}
现在我需要Timer 过程在另一个线程上运行,因为它会一直等到收到通知或时间到了。但是客户端应该不知道有两个线程。就客户端而言,它只会做一个schedulerInstance.setAlarm(myDate),它应该被处理。
所以Scheduler 必须为alarmTimer() 创建一个单独的线程。我如何在仍然引用正确的this 对象的同时从这个新线程调用alarmTimer?处理我希望多个线程保持对原始 Scheduler 实例的引用以便 wait() 和 notify() 工作的情况的正确方法是什么?
【问题讨论】:
-
从 Java 5 开始,您可以使用
ScheduledExecutorService来完成这项工作。
标签: java multithreading synchronization this