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