java周期执行_java 执行周期性任务的线程池newScheduledThreadPool,怎么让它停下来或结束?...

博客介绍了Java中周期执行任务的取消操作。scheduleXxx返回的Future有cancel(boolean)方法,cancel(false)不中断当前执行,cancel(true)会中断线程。还给出示例代码,实现执行10次后取消任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

scheduleXxx之后会返回一个Future,有个cancel(boolean)方法可以结束执行。

其中如果正在执行,cancel(false)不会中断(这一次可以执行完,后面不会执行了),而cancel(true)会中断线程。

这是简单的基本工:执行10次以后,把自己cancel掉。

public class Test {

abstract static class SelfCancelable implements Runnable {

private volatile boolean canceled = false;

private volatile Future> future;

public final boolean cancel() {

canceled = true;

Future> future = this.future;

if (future != null) {

return future.cancel(true);

}

return false;

}

public final void setFuture(Future> future) {

this.future = future;

if (canceled)

future.cancel(true);

}

public final boolean isCanceled() {

return canceled;

}

}

public static void main(String[] args) {

ScheduledExecutorService schedule = Executors.newSingleThreadScheduledExecutor();

SelfCancelable runnable = new SelfCancelable() {

int count = 0;

public void run() {

if (isCanceled()) {

return;

}

count++;

System.out.println(Thread.currentThread() + " execute every 3 seconds:count " + count);

if (count >= 10) {

cancel();

}

}

};

Future future = schedule.scheduleWithFixedDelay(runnable, 1, 3, TimeUnit.SECONDS);

runnable.setFuture(future);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值