kiesession.insert()和kiesession.fireallrules()是否线程安全?

tmb3ates  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(802)

我用的是Spring Boot的口水。在我的项目中,我正在制作kiesession、kiecontainer和kieservices的单例bean。会话将在不同的单例服务和控制器中使用。我想知道 KieSesion.insert() 以及 KieSession.fireAllRules() 对于单例bean实现是线程安全的。或者我应该创建一个对kiesesion.insert()和kiesession.fireallrules()具有同步访问权限的实用程序类吗?

qfe3c7zg

qfe3c7zg1#

这个 KieSession 从drools 6开始就一直是线程安全的
引擎处理多线程的代码被部分重写,以消除大量的同步点,提高稳定性和可预测性。特别是这个新的实现允许用户线程(在会话上执行insert/update/delete操作)、drools引擎线程(执行正确的规则计算)和timer线程(执行基于时间的操作,如events expiration)之间更清晰的分离和更好的交互。
7.52.0.Final ,如果不需要获得某些性能,用户可以禁用线程安全。以下是相关的发行说明:
按照默认配置,一个会话是线程安全的,可以安全地共享,并由多个线程同时使用。但是,如果kiesession正在运行,它需要额外的同步点来支持线程安全,而这不是必需的,并且最终会降低kiesession的性能。因此,引入了一个新的threadsafeoption,您可以使用它选择性地禁用线程安全性。threadsafe选项由两个值组成,包括yes(默认)和no。

相关问题