我有一个图书馆电话,比方说Descriptor.compute(Molecule m)
。Java中实际停止()线程的线程池?
对于某些分子(库中的一个bug)以及对于某些分子来说,这个调用会永远挂起,它会长时间进行计算。我想在服务器上运行计算,最好采用多线程或多处理的方式,以便可以使用所有处理器。此外,我不希望计算机花费比TIMEOUT
更多的时间用于任何分子。
由于compute
方法不会对isInterrupted()
进行任何检查,也不会在任何地方等待,因此它不会响应Thread.interrupt()
调用。
所以我认为我需要使用Thread.stop()
,它在阻止这种类型的任务中工作正常。
我的问题是:是否有一些线程池能够实际停止线程?
我做了一个简单的池,它使用ArrayBlockingQueue<Input>
和ArrayBlockingQueue<Result>
进行通信。然而,我在compute()
期间奇怪NullPointerException
,我无法跟踪(这些异常也有空堆栈跟踪)。所以我问是否已经有一些现有的实施,我的谷歌搜索没有带来任何收获,我发现的所有东西只有interrupt
s。
谢谢你的时间。
编辑:顺便说一下,图书馆是CDK。
嗯..如果你设置M为空另一个线程,是否强制'计算'方法抛出异常?如果不是,“分子”中是否有其他字段经常被“计算”处理并强制进行段错误/ AV? –
每个描述符实现的行为不同。不幸的是,没有一个安全的地方可以抛出异常。 – Krab
“图书馆中的一个错误”:虽然这可能不是近期的解决方案,但为了公众利益,您应该向他们提交错误报告(或者如果已经存在,请对其进行投票)。 – Thilo