Каков наилучший способ реализации параллельного цикла с указанным числом потоков? Как это:
int maxThreads=5;
int curretnThreads=0;
for(int i = 0; i < 10000; i++){
if(currentThreads<maxThreads){
start thread......
}else{
wait...
}
}
Я бы сначала создал ForkJoinPool
с фиксированным количеством потоков:
final ForkJoinPool forkJoinPool = new ForkJoinPool(numThreads);
Теперь просто выполните операцию параллельного потока в задаче:
forkJoinPool.submit(() -> {
IntStream.range(0, 10_000)
.parallel()
.forEach(i -> {
//do stuff
});
});
Очевидно, что этот пример просто переводит ваш код буквально. Я бы рекомендовал вам использовать Stream
API в полном объеме, а не только в цикле [0, 10,000)
.
runnable
, классthread
или как?