首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OGNL线程安全

OGNL线程安全
EN

Stack Overflow用户
提问于 2010-04-30 23:09:31
回答 2查看 561关注 0票数 1

我打算在Struts2作用域之外重用OGNL库。我有一组相当大的公式,这就是为什么我想要预编译所有的公式:

代码语言:javascript
复制
Ognl.parseExpression(expressionString);

但是我不确定预编译的表达式是否可以在多线程环境中使用。有没有人知道它是否可以使用?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-07 10:17:01

这段来自OGNL的PropertyUtils代码被写成线程安全的,所以我猜编译后的表达式应该是线程安全的。

进一步的证据是,大多数访问器API提供了可变状态作为上下文参数(例如,参见PropertyAccessor),因此类本身几乎没有可变状态。不可变的类本质上是线程安全的。开发人员指南敦促扩展是线程安全的,最后查看代码,在有可变状态的地方,它在synchronized块中受到保护,例如参见EvaluationPool

总之,OGNL似乎被设计成线程安全的。它是否真的是另一个问题!您可以编写一个快速测试来确定,例如使用Concutest。或者,如果线程的数量是合理的,那么将所有表达式存储在一个ThreadLocal中就可以完全避免这个问题,代价是需要一点额外的内存(也可能不是,就像OGNL做表达式缓存那样)。

票数 1
EN

Stack Overflow用户

发布于 2010-05-05 19:55:16

我认为你最好的选择是直接联系原始开发者,或者通过邮件列表联系:

http://www.opensymphony.com/ognl/members.action

https://ognl.dev.java.net/servlets/ProjectMailingListList

这个项目似乎被放弃了一段时间,所以几乎没有其他人知道:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2745512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档