3

不幸的是,我们不得不调用一个有时永远不会返回的方法,并且永远冻结调用它的线程。幸运的是,实际调用与系统中的其他东西几乎没有交互,并且不返回任何值。所以我们在想,在我们可以修复有问题的代码之前,我们需要在一个单独的线程中运行调用,我们可以监控它并在它超过超时时中断。

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

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

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

如果这是正确的方法,或者接近,如果您对自己的时间感到慷慨,我也非常感谢一个简短的代码示例。:)

谢谢

4

1 回答 1

4

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

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

要中断任务,它必须表现良好并检查中断,否则它实际上不会停止。但是,如果它表现良好,则不太可能首先被杀死。

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

于 2012-10-12T16:03:53.790 回答