gpt4 book ai didi

java - 调用TimerTask的run()方法

转载 作者:行者123 更新时间:2023-12-01 15:10:56 25 4
gpt4 key购买 nike

对于我正在解决的问题,我必须定期运行一系列调用。为了实现这一点,我实现了 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 的线程在执行这些方法时被阻止。对于在计时器到期以及满足 ProcessEventManager.conditionalTask​​ 中的条件满足的情况下,TimerTask 负责运行这些方法,最好的方法是什么是吗?

最佳答案

基本上,是的,可以按照你写的那样做,但更清晰的方法是从 TimerTask 内部调用一些处理方法,当你想执行此操作时,调用它直接,而不是通过 TimerTask 对象。

public class TimerTaskA extends TimerTask
{

public void doCoolThings()
{
processEvent1();
processEvent2();
processEvent3();
}

@Override
public void run()
{
doCoolThings();
}
}

在另一个类中,需要时:

timerTask.doCoolThings();

在我看来,主要是因为 run 的目的是作为线程(或调用者)入口点,而不是执行特定任务。

关于java - 调用TimerTask的run()方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12378230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com