【问题标题】:Why is Pool count increasing for Executor Service Implementation?为什么执行器服务实施的池计数增加?
【发布时间】:2016-01-15 12:03:10
【问题描述】:

我在 Weblogic 服务器中部署了一个 java 程序,该程序使用 Quartz 调度程序执行。该程序每 10 秒执行一次。在 java 代码中,我使用 ExcutorService 创建了两个线程,最后我调用了 service.shutdown()。但是每次石英调度程序运行程序时,它都会通过增加池 id 来创建一个新的线程池,例如“pool-109-thread-1”和“pool-109-thread-2”,然后是 pool-110-thread-1”和“pool-110-thread-2”。所以这个池数正在增加。可以吗,还是我需要在我的代码中更改某些内容? 下面的示例代码:`

public void post(){
ExecutorService service = Executors.newFixedThreadPool(2);
    for (String filePath : strArray) {
service.submit(new PostImages(postURL,filePath)); 
}
service.shutDown();
}

`

【问题讨论】:

  • 你不应该每次都初始化ExecutorService
  • 好的,但是我的代码中的旧线程池会发生什么?为什么每次执行 post() 方法时池数都会增加? service.shutdown() 不工作吗?
  • 嗨,Xersis:你什么时候调用 post() 方法?将此语句移出 post() 方法。 ExecutorService 服务 = Executors.newFixedThreadPool(2);在其他地方调用 shutdown() 方法。

标签: java multithreading executorservice


【解决方案1】:

每次调用Executors.newFixedThreadPool(2) 时,都会创建一个包含 2 个线程的新线程池。如果运行次数过多会出现问题,因为您的操作系统的进程数会崩溃。

您必须将局部变量转换为静态变量,并且该线程池只有 1 个实例,只保留 2 个线程来执行作业。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,这就是你想要使用的

    如果您想知道某项任务或某批任务何时完成,您可以使用ExecutorService.submit(Runnable)。调用此方法会返回一个 Future 对象,该对象可以放入一个 Collection 中,然后您的主线程将遍历每个对象调用 Future.get()。这将导致您的主线程暂停执行,直到 ExecutorService 处理完所有 Runnable 任务。

    Collection<Future<?>> futures = new LinkedList<Future<?>>();
    futures.add(executorService.submit(myRunnable));
    for (Future<?> future:futures) {
        future.get();
    }
    

    How to wait for all tasks in an ThreadPoolExecutor to finish without shutting down the Executor?

    【讨论】:

      【解决方案3】:

      我觉得还可以。它可能会增加池 ID,因为旧的仍在等待垃圾收集器。

      【讨论】:

      • 嗨 Leo.. 为了测试,我在 weblogic 环境中重新部署了战争,令人惊讶的是,池 ID 再次增加了。早些时候它是“pool-309-thread-1”,重新部署后它从“pool-310-thread-1”开始。还好吗?还是有严重的问题?请帮忙!!
      • @Xerxis 你找到这背后的原因了吗?我面临着类似的情况,线程池数量每次都在增加。
      猜你喜欢
      • 1970-01-01
      • 2016-06-30
      • 2019-05-06
      • 1970-01-01
      • 1970-01-01
      • 2020-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多