我使用ExecutorService来执行我的逻辑。如下所示,run方法应该在无限循环中执行。简而言之,run方法是一个消息使用者,它应该从队列中移除消息并处理消息。但是,doSomething()方法遇到一个异常,并且永远不会返回。经过分析,我意识到doSomething()方法中有一个NullPointer。虽然我已经处理了这个异常,但我如何确保循环永远不会终止 - 尽管有任何运行时异常。我无法承担我的Runnable任务无法工作。它会停止整个功能。从ExecutorService中的异常中恢复
ExecutorService service = Executors.newSingleThreadExecutor()
service.submit(new Runnable(){
public void run(){
while(true){
doSomething();
}
}
})
好像ExecutorService的滥用。为什么不创建自己的线程? – dnault 2014-12-03 10:47:30
@dnault为什么这是一个滥用?这不是一种更好的做事方式吗? – 2014-12-03 11:14:38
也许“滥用”太过分了。但是ExecutorService在这里没有添加任何值。当你需要运行几个任务时,ExecutorService通常被用作抽象,并且提交任务给服务的代码并不关心它们如何执行的细节。但是在这里你有一个永远循环的单一任务。任何试图向执行者提交其他任务的尝试都将永远阻塞,因为循环任务从未结束。 – dnault 2014-12-03 21:19:39