我的应用程序为端点定义了调度程序来处理任务。该任务具有固定的Threadpool(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 block (你很可能应该有一个从 latch.countDown()
部分调用 finally
的一个),并且你不调用 Future.get()
如果执行 Runnable
则抛出异常抛出异常,你永远不会知道抛出了异常。
如果至少有一个任务抛出异常,您的锁存器将永远不会达到最终状态。
关于java - CloudFoundry 中部署的线程池代码不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60116586/