我打算为我的java应用程序实现一个计时器服务。 核心结构是这样的。
在Base类中,我调用scheduleATassk()来启动第一个具有延迟设置的任务。当延迟结束时,它将调用onTimeUp()通知我,我们可以计算下一个警报持续时间。所以在onTimeUp()中,如果满足条件,我将使用新的持续时间调用scheduleATassk()并重复循环。
我的问题是: 第一个任务将由主线程调度(注意在Base类的构造函数(主线程)中,它调用scheduleATassk()以使警报运行)。但是,任何后续的scheduleATassk()都将由子线程调用。有什么影响吗?安全吗?我可以改进设计吗?
public class Base {
private ScheduledExecutorService service = null;
public Base() {
service = Executors.newSingleThreadScheduledExecutor();
scheduleATassk(10);
}
public void onTimeUp() throws Exception {
if (hasMoreTime) {
scheduleATassk(newCalculatedDuration);
} else {
System.out.println("TIMER IS UP");
}
}
protected void scheduleATassk(long duration) {
service.schedule(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
onTimeUp();
}
}, duration, TimeUnit.MILLISECONDS);}
}
}