如何解决KieSession.insert() 和 KieSession.fireAllRules() 线程安全吗?
我将 Drools 与 Spring Boot 结合使用。在我的项目中,我正在制作 KieSession、KieContainer 和 KieServices 的单例 Bean。 KieSession 将用于不同的单例服务和控制器。我想知道 KieSesion.insert()
和 KieSession.fireAllRules()
是否具有单例 bean 实现的线程安全。或者我应该创建一个具有同步访问 KieSesion.insert() 和 KieSession.fireAllRules() 的实用程序类?
解决方法
KieSession
从 Drools 6 开始就是线程安全的,从 manual
引擎处理多线程的代码已经部分 重写以移除大量同步点 并提高稳定性和可预测性。特别是这个新 实现允许更清晰的分离和更好的交互 在用户线程之间(执行插入/更新/删除操作 在会话中),Drools 引擎线程(执行正确的规则 评估)和计时器一(执行基于时间的操作,如 事件到期)。
从 7.52.0.Final
开始,如果不需要获得一些性能,用户可以禁用线程安全。以下是 relevant 发行说明:
根据默认配置,KieSession 是线程安全的并且可以 被多个线程安全共享并同时使用。 但是,如果 KieSession 正在运行,则需要额外的 同步点支持线程安全,这不是 需要,最终会降低 KieSession 的性能。 因此,引入了一个新的 ThreadSafeOption,您可以使用它 可选地禁用线程安全。 ThreadSafeOption 包括 两个值,包括 YES(默认)和 NO。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。