gpt4 book ai didi

multithreading - SpelExpression 线程安全吗?

转载 作者:行者123 更新时间:2023-12-01 02:16:15 24 4
gpt4 key购买 nike

具体来说,可以从具有不同上下文的同一 SpelExpression 上的多个线程安全地调用 getValue(StandardEvaluationContext, Class) 吗?

我看到 Spring Source 的 Gary Russell 提出并回答了这个问题。但是,我也看到有人报告并发问题。我查看了相关 Spring 类的源代码,但不能确定。

我想从与 spring-el 合作过的 Spring 开发人员或在高度并发的环境中使用过此类的 Spring 用户那里得到明确的答案。

谢谢。

最佳答案

我知道你想要另一种意见,但我会澄清它是线程安全的,只要你在另一个线程使用它时不改变它(或者你每次都使用一个新的评估上下文,如果你需要使用变量等对其进行自定义),

但是,您必须将根对象传递给 getValue() 而不是在上下文中设置根对象(使用 setRootObject() - 这会改变上下文)。如果您有 #root对象,使用

getValue(EvaluationContext context, Object rootObject, Class<T> expectedResultType)

如果您没有根对象,并且不以其他方式改变上下文,则可以使用
getValue(EvaluationContext context, Class<T> expectedResultType) 

具有共享上下文。

Spring Integration 在(在许多情况下)高度多线程的环境中广泛使用 SpEL。我们对所有静态情况(没有运行时变量)使用相同的评估上下文,并将根对象(通常是消息)传递到 getValue()称呼。对于需要向上下文添加变量的情况,每个评估都会获得一个新的评估上下文。

关于multithreading - SpelExpression 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24681567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com