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

标签 java multithreading war cloud-foundry

我的应用程序为端点定义了调度程序来处理任务。该任务具有固定的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/

相关文章:

java - 在静态图像上制作移动矩形的动画 Java SWT

multithreading - ThreadPoolExecutor - 如果池已满,我可以抛出异常吗

java - 部署spring boot应用需要web.xml吗

java - 在 SPRING 中使用 maven 而不是 ant,部署和构建

c - 互斥锁和解锁的一些解释

JavaEE - WAR - 已部署::如何从资源目录读取文件

java - 如何将循环的结果放入带有索引的字符串中?

java - 如何从 Android 中 XML 中定义的字符串数组中获取对单个元素的引用

Java 在一个命令中使用处理器进行编译

c# - 处理多个悬停以单击kinect的C#中的事件