我们在项目中使用了 Drools kieSessions。许多线程可以创建新的 kieSession。有时线程可能会在创建会话时挂起。因此问题是:
首先
- kieContainer.newKieSession 是线程安全的操作吗?
- 挂起的原因可能是肮脏的写作或阅读 kie 会话的集合或类似的东西吗?
我们在项目中使用了 Drools kieSessions。许多线程可以创建新的 kieSession。有时线程可能会在创建会话时挂起。因此问题是:
首先
正如我在实践中检查的那样
newKieSession
不是线程安全的操作。
我在 drools 文档中找不到任何明确的声明,但我的理解是它KieContainer
是线程安全的,甚至足够智能(有点静默/神奇地)更新自身(或者更确切地说是它包含的 KieBases)。
出于所有实际目的(调试/阅读源代码),我认为所有这些KieContainer.newStatelessKieSession()
方法KieContainer.newKieSession()
都是线程安全的。
我不是 100% 确定updateToVersion()
and方法,以及通过这些方法更改 kie 容器是否与and方法updateDependencyToVersion()
并行工作。KieContainer.newStatelessKieSession()
newKieSession()
在我们的应用程序中,我们设法将修改规则(以及模块、基础、会话及其配置)的逻辑与规则评估(使用newKieSession
etc 方法)分开,到目前为止一切似乎都很好,但我想了解您如何得出它不是线程安全的结论。