好吧,对gpars来说是全新的,如果有明显的答案,请原谅我。
这是我的情景。我们目前有一段包含在Thread.start {}块中的代码。它这样做是为了它可以在后台发送消息到消息队列,而不是阻止用户请求。我们最近遇到的一个问题是对于大块工作,用户可能会执行另一个操作,这会导致该块再次执行。由于它是线程化的,第二批消息可能会在第一批消息发送到第一批消息之前发送。
我想将此过程更改为使用gpar作为队列流。我已经看过创建池的示例,例如
def pool = GParsPool.createPool()
或
def pool = new ForkJoinPool()
然后将池用作
GParsPool.withExistingPool(pool) {
...
}
这似乎可以说明如果用户再次执行操作,我可以重用已创建的池,并且如果我的池大小为1,则不会无序执行操作。
我的问题是,这是用gpars做到这一点的最好方法吗?此外,我如何知道游泳池何时完成所有工作?所有工作完成后会终止吗?如果是这样,是否有一种方法可用于检查池是否已完成/终止以知道我需要一个新的?
任何帮助都将不胜感激。
答案 0 :(得分:0)
不,显式创建的池本身不会终止。你必须明确地对它们调用shutdown()。
然而,使用withPool(){}命令将保证在代码块完成后销毁池。
答案 1 :(得分:0)
以下是我们对此问题的解决方案。应该注意的是,由于我们的要求,我们遵循了这条路线
鉴于上述情况,我们实施了以下内容:
{{1}}