Grails和多线程进程

时间:2010-06-25 19:38:15

标签: java web-applications grails multithreading

我有一个grails应用程序,我需要触发一个cpu密集型进程。我正在考虑创建一个服务,该服务产生多个线程,这些线程执行相同的计算但使用随机数据来比较稍后的结果。这样做是否安全?有什么建议/经验吗?

感谢。

2 个答案:

答案 0 :(得分:4)

您可能遇到的最大问题是您创建的任何线程都不会自动附加一个hibernate会话。因此,如果您需要对您的域名执行任何操作,则需要手动连接内容。我刚才看了一下它是可行的,但我最后走了另一条路,所以没有一个完整的例子来讨论。

我认为还有一些插件,比如Background Thread插件会为你生成一个线程并附加相应的hibernate内容。我不确定该插件是否仍然可以维护,因此它可能无法在1.3或更高版本上运行。

您也可以使用withTransaction link text在线程中实例化一个有效的事务:

MyDomain.withTransaction { status ->
    // GORM stuff that needs a valid transaction
}

请注意,每个线程将拥有它自己的事务,并且它不会参与与其他线程相同的事务(因此如果一个线程失败,您将无法回滚所有内容)。

答案 1 :(得分:1)

<plug>

碰巧,我现在正在审查second edition of Groovy in Action的第17章(就像我打开Word文档一样,每当我不在这里发帖时我就会编辑它)。这章通常涵盖了Groovy中的并发性 - 它没有明确提到Grails,但我怀疑这对你可能想要使用的内容产生了很多影响。第17章已经在早期访问“MEAP”版本中提供......

</plug>

无论如何,我自己在Groovy中没有直接的并发经验,但听起来你应该看GPars