【发布时间】:2013-12-08 01:38:14
【问题描述】:
尝试调试我们应用程序的轮询器线程之一永远不会返回的竞争条件,从而导致未来的轮询器永远不会被调度。抽象地说,在捕获问题的同时隐藏我们的业务逻辑,这就是我们的代码路径。
我们必须更新远程服务器中资源 Y 的某些状态 X。我们有一个资源管理器,它更改资源状态并更新 X 作为更改的副作用。该经理不断地轮询资源,当它认为资源已更新时,它使用ThreadPoolExecutor 来完成工作。这个线程池执行器有一个合理大小的阻塞队列,但最大线程数相当少。线程转储的挂起本身发生在 invokeAll 调用中(除其他外)
我们有理由相信这个池执行器中的核心/最大线程数正忙于做其他事情(如果您愿意,可以更新更多资源状态)。
由于invokeAll返回我们等待的期货,问题是即使执行程序使用的阻塞数据结构足够大以接受通过invokeAll传入的工作但没有足够的可用线程,invokeAll是否会挂起?
【问题讨论】:
标签: java multithreading threadpool threadpoolexecutor