Java Experiences

被线程池拒绝的任务,不会触发 run 方法,也会导致 FutureTask 不会从 NEW 状态向后流转至其他状态。

FutureTask

在 Submit 异步事件到线程池的时候,若要使用 Future.get,务必添加超时时间,否则有可能一直阻塞在 LockSupport.park 这个位置,导致内存泄露问题。

且,在自定义 RejectedPolicy 的时候,也要注意处理 rejectedException,保证 FutureTask 的状态能够向后流转,需要抛出 RejectedExecutionException,让 FutureTask 捕获,以进入到 Rejected 状态,从而 unpark 上述的 Future.get 导致的 LockSupport.park 等待。

Licensed under CC BY-NC-SA 4.0
Get Things Done
Built with Hugo
Theme Stack designed by Jimmy