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



我想实现一个场景,我可能不得不处理数千个线程(线程计数不固定,但它可能在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);
    }
}

缓存的线程池允许你从一个不固定的大小开始,然后根据需要扩展。

请参见:Executors.newCachedThreadPool

代码更改:

ExecutorService executor = Executors.newCachedThreadPool();

最新更新