Рассматривали ли вы использование помощников java.util.concurrent? Это позволяет многопоточное программирование на более высоком уровне абстракции. Существует простой интерфейс для запуска параллельных задач в пуле потоков, который проще в управлении и настройке, чем просто создание n потоков для n задач и надежда на лучшее.
Ваш код в конечном итоге будет выглядеть примерно так, где вы можете настраивать nThreads, пока не получите наилучшую производительность:
import java.util.concurrent.*
def nThreads = 1000
def pool = Executors.newFixedThreadPool(nThreads)
urls.each { url ->
pool.submit(url)
}
def timeout = 60
pool.awaitTermination(timeout, TimeUnit.SECONDS)