我想实现一个场景,我可能需要处理数千个线程(线程计数不是固定的,但可能在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);
}
}
答案 0 :(得分:2)
缓存的线程池允许您从可以根据需要扩展的非固定大小开始。
请参阅:Executors.newCachedThreadPool
代码更改:
ExecutorService executor = Executors.newCachedThreadPool();