我用的是Spring Boot的口水。在我的项目中,我正在制作kiesession、kiecontainer和kieservices的单例bean。会话将在不同的单例服务和控制器中使用。我想知道 KieSesion.insert() 以及 KieSession.fireAllRules() 对于单例bean实现是线程安全的。或者我应该创建一个对kiesesion.insert()和kiesession.fireallrules()具有同步访问权限的实用程序类吗?
KieSesion.insert()
KieSession.fireAllRules()
qfe3c7zg1#
这个 KieSession 从drools 6开始就一直是线程安全的引擎处理多线程的代码被部分重写,以消除大量的同步点,提高稳定性和可预测性。特别是这个新的实现允许用户线程(在会话上执行insert/update/delete操作)、drools引擎线程(执行正确的规则计算)和timer线程(执行基于时间的操作,如events expiration)之间更清晰的分离和更好的交互。自 7.52.0.Final ,如果不需要获得某些性能,用户可以禁用线程安全。以下是相关的发行说明:按照默认配置,一个会话是线程安全的,可以安全地共享,并由多个线程同时使用。但是,如果kiesession正在运行,它需要额外的同步点来支持线程安全,而这不是必需的,并且最终会降低kiesession的性能。因此,引入了一个新的threadsafeoption,您可以使用它选择性地禁用线程安全性。threadsafe选项由两个值组成,包括yes(默认)和no。
KieSession
7.52.0.Final
1条答案
按热度按时间qfe3c7zg1#
这个
KieSession
从drools 6开始就一直是线程安全的引擎处理多线程的代码被部分重写,以消除大量的同步点,提高稳定性和可预测性。特别是这个新的实现允许用户线程(在会话上执行insert/update/delete操作)、drools引擎线程(执行正确的规则计算)和timer线程(执行基于时间的操作,如events expiration)之间更清晰的分离和更好的交互。
自
7.52.0.Final
,如果不需要获得某些性能,用户可以禁用线程安全。以下是相关的发行说明:按照默认配置,一个会话是线程安全的,可以安全地共享,并由多个线程同时使用。但是,如果kiesession正在运行,它需要额外的同步点来支持线程安全,而这不是必需的,并且最终会降低kiesession的性能。因此,引入了一个新的threadsafeoption,您可以使用它选择性地禁用线程安全性。threadsafe选项由两个值组成,包括yes(默认)和no。