multithreading - java.util.concurrent.RejectedExecutionException:被 java.util.concurrent.ThreadPoolExecutor 拒绝
问题描述
我有一个集成的执行器服务来同时执行任务,当没有使用时Future
,一切正常。为了检查任务是否完成并且执行器线程没有失败,我添加了一个Future
并尝试检查失败状态。
示例代码:
val pool = Executors.newFixedThreadPool(THREAD_COUNT)
implicit val context = ExecutionContext.fromExecutorService(pool)
var index = 0
while (index < employeeJobDataList.size()) {
val startIndex = index
var endIndex = index + BATCH_THRESHOLD
if (startIndex + BATCH_THRESHOLD >= employeeJobDataList.size()) {
endIndex = employeeJobDataList.size()
}
val future = Future({
upsertsFailedBatches.addAll(batchSaveInDDB(employeeJobDataList.subList(startIndex, endIndex), failedList))
})
future.onFailure { case e : Throwable => errorFromExecutorService . append (e.toString) }
index = index + BATCH_THRESHOLD
}
context.shutdown()
while (!context.isTerminated()) {
Thread.sleep(THREAD_SLEEP_TIME_MILLI)
}
错误详情:
java.util.concurrent.RejectedExecutionException: Task scala.concurrent.impl.CallbackRunnable@74a938eb rejected from java.util.concurrent.ThreadPoolExecutor@5e5fcd94[Shutting down, pool size = 10, active threads = 10, queued tasks = 87323, completed tasks = 213]
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2063)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:830)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1379)
at scala.concurrent.impl.ExecutionContextImpl$$anon$1.execute(ExecutionContextImpl.scala:136)
at scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:44)
at scala.concurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:252)
at scala.concurrent.Promise$class.complete(Promise.scala:55)
at scala.concurrent.impl.Promise$DefaultPromise.complete(Promise.scala:157)
at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:23)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
解决方案
推荐阅读
- r - “检查是否可以安装软件包”时签入了什么?
- r - 在 facet_wrap ggplot2 中控制 x-labels
- javascript - 这些是逻辑运算符吗?
- r - 如何将yyyy-mm格式的字符转换为日期r
- spring-integration - 未能创建 SFTP 会话
- android - Android Studio 布局 xml 文件代码从默认值自动更改
- file - 使用带有共享文件指针的 MPI-IO 将巨大的数组写入单个文件
- reactjs - 我应该将 access_token 存储在 localStorage+Redux 中还是 axios 默认值中?
- r - 如何根据另一个数据帧对一个数据帧执行操作?
- scala - 如何在 Spark 中使用 from_json() 数据框?