我有一个使用ScheduledExecutorService
处理多个Runnable
的应用程序:每个应用程序都以固定费率计划,只要应用程序必须,它就会存活。
我需要一个解决方案,如果这些线程中的任何一个因某些异常而被终止时会收到通知,所以我可以再次安排它们。
我可以使用任何模式来解决这个问题吗?或者我在我的应用程序中使用了错误的对象?
答案 0 :(得分:0)
如果只是简单地包装class CatchingRunnable implements Runnable {
private final Runnable delegate;
CatchingRunnable(Runnable delegate) {
this.delegate = delegate;
}
@Override public void run() {
try {
delegate.run();
} catch (RuntimeException e) {
// Handle the exception somehow, e.g. log it.
}
}
}
以便异常永远不会导致任务被取消,可能会更容易:
runnable
现在通过以下方式安排executor.scheduleAtFixedRate(new CatchingRunnable(runnable), delay, period, unit);
module.exports = {
attributes: {
name: {
type: 'string',
required: true
},
description:{
type: 'string'
},
project: {
model: 'project',
required: true
}, ...
然后你永远不必担心重新安排它们。
答案 1 :(得分:0)
如果ScheduleFuture完成,您可以维护一个处理程序重新提交。