Я хочу реализовать один сценарий, когда мне, возможно, придется обрабатывать тысячи потоков (количество потоков не фиксировано, но может варьироваться в диапазоне 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();