首页 > 解决方案 > 仅当所有线程都抛出异常时如何关闭java执行程序服务

问题描述

我在 java 应用程序中使用下面的代码。它产生 3 个工作线程。我需要的是,如果一个线程失败(从运行中抛出未处理的异常),其他线程应该继续执行。如果我调用 executor.shutdown() 如下所示,它将终止其他线程(不接受新任务)。我想的一个选项是在 ExecutionException catch 块上有一个计数器并仅在 counter== 时调用 shutdown消费者人数。有一个更好的方法吗?

    public void execute()  {
                  int numConsumers = Integer.parseInt(configs.getSINK_NUMBER_OF_CONSUMERs());
Future<?> future=null;
                  log.info("Creating {}  consumers",numConsumers);
                  List<String> topics = Arrays.asList(configs.getTOPIC_NAME());
                  ExecutorService executor = Executors.newFixedThreadPool(numConsumers);
                  final List<SinkConsumer> consumers = new ArrayList<>();
                  for (int i = 0; i < numConsumers; i++) {
                    consumer = new SinkConsumer(UUID.randomUUID().toString(),topics,configs);
                    consumers.add(consumer);
                    future =  executor.submit(consumer);
                  }
            try {
                         future.get();
                     } catch (InterruptedException e) {
                         Thread.currentThread().interrupt();
                     } catch (ExecutionException e) {
                         executor.shutdown();
                     }
            }

标签: javamultithreading

解决方案


推荐阅读