Java中的线程池实际上停止了()线程?
我有一个库调用,比如说Java中的线程池实际上停止了()线程?,java,multithreading,threadpool,Java,Multithreading,Threadpool,我有一个库调用,比如说Descriptor.compute(分子m) 对于某些分子(库中的一个bug),此调用将永远挂起;对于某些分子,此调用将执行长时间的计算。我希望在服务器上运行计算,最好是以多线程或多处理的方式,以便可以使用所有处理器。此外,我不希望计算机在任何分子上花费的时间超过超时时间 由于compute方法既不检查isInterrupted()也不在任何地方等待,因此它不响应Thread.interrupt()调用 所以我想我需要使用Thread.stop(),它可以很好地停止这类任
Descriptor.compute(分子m)
对于某些分子(库中的一个bug),此调用将永远挂起;对于某些分子,此调用将执行长时间的计算。我希望在服务器上运行计算,最好是以多线程或多处理的方式,以便可以使用所有处理器。此外,我不希望计算机在任何分子上花费的时间超过超时时间
由于compute
方法既不检查isInterrupted()
也不在任何地方等待,因此它不响应Thread.interrupt()
调用
所以我想我需要使用Thread.stop()
,它可以很好地停止这类任务
我的问题是:是否存在能够实际停止线程的线程池?
我制作了一个简单的池,它使用ArrayBlockingQueue
和ArrayBlockingQueue
进行通信。但是,在我无法跟踪的compute()
期间,我遇到了奇怪的NullPointerException
s(这些异常也有null堆栈跟踪)。所以我想问的是,是否已经有了一些现有的实现,我的谷歌搜索没有带来任何成果,我发现的一切都只是interrupt
s
谢谢你抽出时间
编辑:顺便说一下,这个库是。在Java中没有好的方法“杀死”线程。读这本书。因此,没有任何现代API(如JDK中的ExecutorServices)会使用这种方法
您必须让这些线程检查中断和终止标志 是的,我知道。不幸的是,对于我来说,这不是一个选项,因为描述符接口是由许多类实现的。在这种情况下,可能产生一个新的JVM进程来完成这些计算就可以了。你可以杀死进程,我已经考虑过了。你知道Python的
多处理
这样简单的东西吗?或者Java中通常用于高级IPC的工具是什么?这可能值得再问一个问题。。。我想,这里有趣的部分是反馈结果的方式。谢谢。如果有人有别的想法,我会把这个问题留着。。如果从另一个线程将M设置为null,是否会强制“compute”方法抛出异常?如果没有,在“分子”中是否还有其他一些字段经常被“计算”访问并将强制执行segfault/AV?每个描述符实现的行为都不同。不幸的是,没有一个公共安全的地方可以抛出异常。“库中的bug”:虽然这可能不是短期解决方案,但为了公众利益,你应该向他们提交bug报告(如果已经存在,也可以投票支持)。