У меня есть 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);
}
}