我目前有一个 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 个线程然后等待线程停止
如果我只使用一个计数变量,那么我遇到的问题是多个线程具有相同的计数,因为同时启动......而且每个线程之间有 1 秒的延迟非常重要。
我怎么解决这个问题?