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