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