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);

}

}

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐