我的应用程序已为端点定义了调度程序以处理任务。该任务具有fixedThreadpool(200)代码,并已部署在Cloud Foundry中。我注释掉了调度程序注释,并使用端点运行此任务,以查看线程池在Cloud Foundry中的工作方式。我看不到线程池在运行,我可以看到何时命中端点,服务被调用并且不执行线程并离开应用程序。
ExecutorService executor = Executors.newFixedThreadPool(200);
CountDownLatch latch = new CountDownLatch(list.size();
for (final Data data : list) {
try {
executor.submit(()->{
A a = invokeDetailsRequest(id);
Long id = (a != null && !StringUtils.isEmpty(id)
? Long.parseLong(id
: 0;
if (ids != null && !ids.isEmpty() && ids.contains(id)) {
.....
}
latch.countDown();
});
} catch (Exception e) {
e.printStackTrace();
}
}
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
executor.shutdown();
我浏览了文档,但没有找到太多帮助。任何人都可以为此提供一些指导。
最可能的选择是在Runnable
内部引发异常。而且,由于您在Runnable
中没有try-catch块(并且您很可能应该在latch.countDown()
部分中调用了finally
的块),并且您不调用Future.get()
,如果执行[ C0]引发异常,您将永远不会知道有引发异常。而且,如果至少有一项任务引发异常,则您的闩锁将永远不会达到最终状态。