好的,gpars 是全新的,所以如果这有一个明显的答案,请原谅我。
这是我的场景。我们目前有一段代码包装在 Thread.start {} 块中。它这样做是为了可以在后台将消息发送到消息队列而不阻塞用户请求。我们最近遇到的一个问题是对于大型工作块,用户可能会执行另一个操作,这会导致该块再次执行。由于它是线程化的,因此第二批消息可能会在第一批消息之前发送,从而导致数据损坏。
我想将此过程更改为与 gpars 一起作为队列流工作。我见过创建池的示例,例如
def pool = GParsPool.createPool()
或者
def pool = new ForkJoinPool()
然后将池用作
GParsPool.withExistingPool(pool) {
...
}
这似乎可以解释如果用户再次执行操作,我可以重用创建的池并且操作不会乱序执行,前提是我的池大小为 1。
我的问题是,这是使用 gpar 执行此操作的最佳方法吗?此外,我如何知道池何时完成所有工作?当所有工作完成时它会终止吗?如果是这样,是否有一种方法可用于检查池是否已完成/终止以知道我需要一个新池?
任何帮助,将不胜感激。