У меня сейчас проблема с GPars, я хотел бы запустить около 30 потоков, но я хочу подождать 1 секунду после каждого запуска потока.
Мой код в настоящее время выглядит примерно так (Groovy / Grails):
withPool(30) { // <= thread pool size
Mail.findAllByStatus("new").eachWithIndexParallel { mail, i -> // <= finds about 5000 mails
sleep(i*1000)
def doSomething = new Test()
doSomething.do(mail) // <= runs for about 60sec
}
}
Проблема в этом решении заключается в том, что "eachWithIndexParallel" запускает все потоки в случайном порядке одновременно, например, с 5000 писем:
начальный поток 3500 = ожидание 3500 секунд
запуск потока 1000= ждать 1000 секунд
.... пока не начнутся 30 потоков, тогда он будет ждать остановки потоков
И мне нужно решение, подобное этому:
запуск потока 2500 = ожидание 1 сек
запуск потока 5 = ожидание 2 с
запуск потока 4888 = ожидание 3 с
... до тех пор, пока не будет запущено 30 потоков, он ожидает остановки потоков
Если я просто использую переменную count, то яу меня проблема в том, что потоки умножения имеют одно и то же число из-за одновременного запуска ... и очень важно, чтобы у меня была задержка в 1 сек между каждым потоком.
Каки я решаю эту проблему?