我集成了执行程序服务,可以同时执行任务。没有未来,一切都会运转良好。为了检查执行程序线程是否完成任务并且没有失败,我添加了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:任务scala.concurrent.impl.CallbackRunnable@74a938eb从java.util.concurrent.ThreadPoolExecutor@5e5fcd94拒绝了[关闭,池大小= 10,活动线程= 10,排队的任务= 87323 ,已完成的任务= 213] 在java.util.concurrent.ThreadPoolExecutor $ AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2063) 在java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:830) 在java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1379) 在scala.concurrent.impl.ExecutionContextImpl $$ anon $ 1.execute(ExecutionContextImpl.scala:136) 在scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:44) 在scala.concurrent.impl.Promise $ DefaultPromise.tryComplete(Promise.scala:252) 在scala.concurrent.Promise $ class.complete(Promise.scala:55) 在scala.concurrent.impl.Promise $ DefaultPromise.complete(Promise.scala:157) 在scala.concurrent.impl.Future $ PromiseCompletingRunnable.run(Future.scala:23) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624) 在java.lang.Thread.run(Thread.java:748)
帮助我了解如何摆脱这种情况