3

我们在项目中使用了 Drools kieSessions。许多线程可以创建新的 kieSession。有时线程可能会在创建会话时挂起。因此问题是:

首先

  1. kieContainer.newKieSession 是线程安全的操作吗?
  2. 挂起的原因可能是肮脏的写作或阅读 kie 会话的集合或类似的东西吗?
4

2 回答 2

5

正如我在实践中检查的那样

newKieSession

不是线程安全的操作。

于 2015-01-09T09:42:25.437 回答
2

我在 drools 文档中找不到任何明确的声明,但我的理解是它KieContainer是线程安全的,甚至足够智能(有点静默/神奇地)更新自身(或者更确切地说是它包含的 KieBases)。

出于所有实际目的(调试/阅读源代码),我认为所有这些KieContainer.newStatelessKieSession()方法KieContainer.newKieSession()都是线程安全的。

我不是 100% 确定updateToVersion()and方法,以及通过这些方法更改 kie 容器是否与and方法updateDependencyToVersion()并行工作。KieContainer.newStatelessKieSession()newKieSession()

在我们的应用程序中,我们设法将修改规则(以及模块、基础、会话及其配置)的逻辑与规则评估(使用newKieSessionetc 方法)分开,到目前为止一切似乎都很好,但我想了解您如何得出它不是线程安全的结论。

于 2016-02-16T16:54:27.243 回答