Код пула потоков, развернутый в CloudFoun dry, не работает - PullRequest
0 голосов
/ 07 февраля 2020

В моем приложении определен планировщик для конечной точки для обработки задачи. Эта задача исправила код Threadpool (200) и развернута в облаке dry. Я закомментировал аннотацию планировщика и запустил эту задачу с использованием конечной точки, чтобы увидеть, как работает пул потоков в облаке dry. Я не вижу работающего пула потоков, я вижу, когда достигается конечная точка, служба вызывается и не выполняет потоки и покидает приложение.

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();

Я просмотрел документацию и не нашел особой помощи. Может ли кто-нибудь дать какое-то руководство по этому вопросу.

1 Ответ

0 голосов
/ 09 февраля 2020

Наиболее вероятным вариантом является то, что исключение выдается внутри Runnable. А поскольку у вас нет блока try-catch внутри Runnable (и, скорее всего, у вас должен быть блок с вызовом latch.countDown() из секции finally), и вы не вызываете Future.get(), который выдает исключение при выполнении Runnable сгенерированное исключение, вы никогда не узнаете, что было сгенерировано исключение. И если хотя бы одно задание выдает исключение, ваша защелка никогда не достигнет конечного состояния.

...