在CloudFoundry中部署的线程池代码不起作用

问题描述 投票:0回答:1

我的应用程序已为端点定义了调度程序以处理任务。该任务具有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();

我浏览了文档,但没有找到太多帮助。任何人都可以为此提供一些指导。

java multithreading war cloudfoundry
1个回答
0
投票

最可能的选择是在Runnable内部引发异常。而且,由于您在Runnable中没有try-catch块(并且您很可能应该在latch.countDown()部分中调用了finally的块),并且您不调用Future.get(),如果执行[ C0]引发异常,您将永远不会知道有引发异常。而且,如果至少有一项任务引发异常,则您的闩锁将永远不会达到最终状态。

© www.soinside.com 2019 - 2024. All rights reserved.