我们在项目中使用了Drools kieSessions。许多线程可以创建新的kieSession。有时线程可以在创建会话时挂起。因此问题是:
首先
答案 0 :(得分:3)
我在实践中检查了
newKieSession
不是线程安全的操作。
答案 1 :(得分:1)
我无法在drools文档中找到任何明确的声明,但我的理解是KieContainer
是线程安全的,甚至足够聪明(有点默默/神奇地)更新自己(或者更确切地说是包含KieBases)。
出于所有实际目的(调试/阅读源代码),我认为所有KieContainer.newStatelessKieSession()
和KieContainer.newKieSession()
方法都是线程安全的。
我不是100%确定updateToVersion()
和updateDependencyToVersion()
方法,以及是否通过KieContainer.newStatelessKieSession()
和newKieSession()
方法并行更改kie容器。< / p>
在我们的应用程序中,我们设法将规则(以及模块,基础,会话及其配置)的修改逻辑与规则评估(使用newKieSession
等方法)分开,事情似乎很好所以远,但我想了解你是如何得出它不是线程安全的结论。