java 如何有效取消定期ScheduledExecutorService任务
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5233893/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-30 10:07:21 来源:igfitidea点击:
How to effectively cancel periodic ScheduledExecutorService task
提问by mre
So, using thislink as a reference, can anyone suggest a more elegant solution for canceling a periodic ScheduledExecutorService task?
那么,使用此链接作为参考,任何人都可以提出一个更优雅的解决方案来取消定期 ScheduledExecutorService 任务吗?
Here's an example of what I'm currently doing:
这是我目前正在做的一个例子:
// 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;
}
采纳答案by Peter Lawrey
I suggest you use int and schedule the task yourself.
我建议您使用 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);
}
}