对于我正在解决的问题,我必须定期运行一系列调用。为此,我实现了 TimerTask。但是,我有时也想通知 timertask 并且需要在满足某些条件时调用相同的方法,即使计时器没有过期。我的代码看起来与此类似。
//File TimerTaskA.java
public class TimerTaskA extends TimerTask
{
@Override
public void run()
{
processEvent1();
processEvent2();
processEvent3();
}
}
//File ProcessEventManager.java
public class ProcessEventManager
{
public TimerTaskA timerTask;
public ProcessEventManager()
{
initTimerTask();
}
public void initTimerTask()
{
Timer timer = new Timer("TimerTaskA", true);
timerTask == new TimerTaskA();
timer.schedule(timerTask , 0, 10000);
}
public void conditionalTask()
{
long time = System.currentTimeMillis();
// some condition statement. here it happens to be time in millisecs ends with 2 or 3.
if (time%10 == 2 || time%10 == 3)
timerTask.run();
}
}
在方法ProcessEventManager.conditionalTask()
中直接调用TimerTask的run(
)方法来度过这种情况是否正确?有没有更好的设计方式来解决这样的问题?
这些processEvent
方法可能是耗时的方法,我不希望ProcessEventManager
在执行这些方法时阻塞正在运行的线程。为了TimerTask
在计时器到期和ProcessEventManager.conditionalTask
满足条件的情况下运行这些方法,最好的方法是什么?