我有一个图书馆电话,让我们说Descriptor.compute(Molecule m)
。
对于某些分子(图书馆中的一个错误),此调用永远存在,对于某些分子,它会长时间进行计算。我想在服务器上运行计算,最好是以多线程或多处理的方式运行,以便可以使用所有处理器。另外,我不希望计算机花费的时间超过TIMEOUT
任何分子。
由于compute
方法未对isInterrupted()
进行任何检查,也未在任何地方等待,因此它不响应Thread.interrupt()
来电。
所以我认为我需要使用Thread.stop()
,它可以很好地阻止这种类型的任务。
我的问题是:是否有一些能够实际停止线程的线程池?
我创建了一个使用ArrayBlockingQueue<Input>
和ArrayBlockingQueue<Result>
进行通信的简单池。但是,我在NullPointerException
期间遇到奇怪的compute()
,我无法追踪(这些异常也有空栈跟踪)。所以我问是否已经没有一些现有的实现,我的谷歌搜索没有带来任何成果,我发现只有interrupt
的所有内容。
感谢您的时间。
编辑:顺便说一句,图书馆是CDK。
答案 0 :(得分:2)
Java中没有“杀死”线程的好方法。阅读long disclaimer on the deprecated Thread#stop method。因此,没有现代API(例如JDK中的ExecutorServices)将使用此方法。
您必须检查这些线程是否有中断和终止标志。