私が解決している問題については、定期的に一連の呼び出しを実行する必要があります。これを実現するために、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
最良の方法は何ですか?