在Java中启动和处理数千个线程的最佳方法是什么?

时间:2014-06-04 08:16:27

标签: java concurrency

我想实现一个场景,我可能需要处理数千个线程(线程计数不是固定的,但可能在1000-5000范围内)。下面是一个非常有名的方法来执行此实现,但我认为这不是一种优化的方法来执行此操作。 还有其他任何优化的方法吗?基本上我不想从固定的线程池大小开始?

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Main {
  private static final int NTHREDS = 1000;

  public static void main(String[] args) {
    ExecutorService executor = Executors.newFixedThreadPool(NTHREDS);
    for (int i = 0; i < 500; i++) {
      Runnable worker = new MyRunnable(10000000L + i);
      executor.execute(worker);
    }
}

1 个答案:

答案 0 :(得分:2)

缓存的线程池允许您从可以根据需要扩展的非固定大小开始。

请参阅:Executors.newCachedThreadPool

代码更改:

ExecutorService executor = Executors.newCachedThreadPool();