Executors.newSingleThreadExecutor()是运行我需要超时的任务的合适选择吗?

时间:2012-10-12 16:00:00

标签: java concurrency

我们遗憾地被困在中期,不得不调用一个有时永远不会返回的方法,并永远冻结调用它的线程。幸运的是,实际调用与系统中的其他几个进行交互,并且不返回任何值。所以我们认为,在我们修复有问题的代码之前,我们需要在一个单独的线程中运行调用,如果它超过了超时,我们可以监视和中断。

显然聪明的人比我已经解决了这个问题并将他们的礼物留在并发包中,因为这将是我第一次使用并发包中的任何东西,我只想确认我选择了最佳方法。

所以我想通过调用Excutors.newSingleThreadExecutor获取ExecutorService,向它提交Runnable,然后调用Future.get()的重载,接受超时作为参数。

要执行的实际任务就是在一个对象上调用单个void方法,我可以将其传递给Runnable的构造函数。

如果这是正确的方法,或者关闭,如果您对时间感到慷慨,我也非常感谢您提供简短的代码示例。 :)

由于

1 个答案:

答案 0 :(得分:4)

  

显然比我更聪明的人已经解决了这个问题

实际上它并没有真正解决恕我直言。

要中断任务,它必须表现良好并检查中断或它实际上不会停止。但是,如果它表现良好,那么首先不一定需要将其杀死。

如果您确定没有可能的副作用,可以使用已弃用的Thread.stop()。这需要使用普通的线程。即使您“知道”这不应该导致问题并且再次使用标志来停止任务也不理想。