我有一个执行者,每5秒执行一次任务
public class ScheduledTaskExecutor {
public int execute(){
ScheduledExecutorService executor = Executors.newScheduledThreadPool(4);
executor.scheduleAtFixedRate(new Task().run,3,5, TimeUnit.SECONDS);
return -1;
}
}
这是任务。如果IllegalArgumentException
X == 4
public class Task {
private static final Logger LOG = LoggerFactory.getLogger(DcEmailTask.class);
private int x = 0;
public Runnable run = () -> {
String currentThread = Thread.currentThread().getName();
x++;
System.out.println("Thread [" + currentThread + "] is executing the task: " + x);
if (x == 4) throw new IllegalArgumentException();
};
}
程序停止执行,并且没有打印堆栈跟踪。
答案 0 :(得分:0)
此行为是根据ScheduledExecutorService#scheduleAtFixedRate.
的javadoc来解决的,一种方法是在runnable中捕获所有异常。
此答案有更多详细信息,https://stackoverflow.com/a/24902026/3002471
答案 1 :(得分:0)