Java中的线程池实际上是停止()线程?

时间:2011-12-12 09:05:12

标签: java multithreading threadpool

我有一个图书馆电话,让我们说Descriptor.compute(Molecule m)

对于某些分子(图书馆中的一个错误),此调用永远存在,对于某些分子,它会长时间进行计算。我想在服务器上运行计算,最好是以多线程或多处理的方式运行,以便可以使用所有处理器。另外,我不希望计算机花费的时间超过TIMEOUT任何分子。

由于compute方法未对isInterrupted()进行任何检查,也未在任何地方等待,因此它不响应Thread.interrupt()来电。

所以我认为我需要使用Thread.stop(),它可以很好地阻止这种类型的任务。

我的问题是:是否有一些能够实际停止线程的线程池?

我创建了一个使用ArrayBlockingQueue<Input>ArrayBlockingQueue<Result>进行通信的简单池。但是,我在NullPointerException期间遇到奇怪的compute(),我无法追踪(这些异常也有空栈跟踪)。所以我问是否已经没有一些现有的实现,我的谷歌搜索没有带来任何成果,我发现只有interrupt的所有内容。

感谢您的时间。

编辑:顺便说一句,图书馆是CDK

1 个答案:

答案 0 :(得分:2)

Java中没有“杀死”线程的好方法。阅读long disclaimer on the deprecated Thread#stop method。因此,没有现代API(例如JDK中的ExecutorServices)将使用此方法。

您必须检查这些线程是否有中断和终止标志。