如何有效地取消定期的ScheduledExecutorService任务

因此,使用此链接作为参考,任何人都可以提出更优雅的解决方案来取消定期的ScheduledExecutorService任务吗?

这是我目前正在做的事的一个例子:

// do stuff

// Schedule periodic task

currentTask = exec.scheduleAtFixedRate(

new RequestProgressRunnable(),

0,

5000,

TimeUnit.MILLISECONDS);

// Runnable

private class RequestProgressRunnable implements Runnable

{

// Field members

private Integer progressValue = 0;

@Override

public void run()

{

// do stuff

// Check progress value

if (progressValue == 100)

{

// Cancel task

getFuture().cancel(true);

}

else

{

// Increment progress value

progressValue += 10;

}

}

}

/**

* Gets the future object of the scheduled task

* @return Future object

*/

public Future<?> getFuture()

{

return currentTask;

}

回答:

我建议您使用int并自己安排任务。

executor.schedule(new RequestProgressRunnable(), 5000, TimeUnit.MILLISECONDS);

class RequestProgressRunnable implements Runnable {

private int count = 0;

public void run() {

// do stuff

// Increment progress value

progressValue += 10;

// Check progress value

if (progressValue < 100)

executor.schedule(this, 5000, TimeUnit.MILLISECONDS);

}

}

以上是 如何有效地取消定期的ScheduledExecutorService任务 的全部内容, 来源链接: utcz.com/qa/433952.html

回到顶部