【发布时间】:2011-07-10 11:13:35
【问题描述】:
我目前有一个 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 秒的延迟非常重要。
我该如何解决这个问题?
【问题讨论】:
标签: multithreading grails groovy gpars