java调用TimerTask的run()方法
对于我正在解决的问题,我必须定期运行一系列调用。为了实现这一点,我实现了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
中的条件满足的情况下运行这些方法,最好的方法是什么
# 1 楼答案
基本上,是的,可以按您编写的那样做,但是更清晰的方法是从
TimerTask
内部调用一些处理方法,当您想要执行此操作时,直接调用它,而不是通过TimerTask
对象在另一类中,需要时:
在我看来,这主要是因为
run
的目的是充当线程(或调用方)入口点,而不是执行特定任务