固定レートで実行するタスクをスケジュールする ScheduledThreadPoolExecutor があります。タスクが「成功」するまで、指定された遅延で最大 10 回実行する必要があります。その後、タスクを再試行したくありません。基本的に、スケジュールされたタスクを停止したい場合は、スケジュールされたタスクの実行を停止する必要がありますが、ScheduledThreadPoolExecutor をシャットダウンする必要はありません。どうやってそれを行うか考えていますか?
ここにいくつかの擬似コードがあります-
public class ScheduledThreadPoolExecutorTest
{
public static ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(15); // no multiple instances, just one to serve all requests
class MyTask implements Runnable
{
private int MAX_ATTEMPTS = 10;
public void run()
{
if(++attempt <= MAX_ATTEMPTS)
{
doX();
if(doXSucceeded)
{
//stop retrying the task anymore
}
}
else
{
//couldn't succeed in MAX attempts, don't bother retrying anymore!
}
}
}
public void main(String[] args)
{
executor.scheduleAtFixedRate(new ScheduledThreadPoolExecutorTest().new MyTask(), 0, 5, TimeUnit.SECONDS);
}
}