jsf-2 - 应用程序范围 Bean 的线程安全

标签 jsf-2 scope thread-safety

我想将文件系统结构保存在应用程序范围 Bean 中,因为这对所有客户端都有效。 每个客户端都可以读取此 bean。

但是数据每天必须刷新4次,因为文件系统可能会改变。

是否可以为此用例使用应用程序范围的 bean,或者刷新数据时是否存在线程安全问题? 另一种方法是什么?单例?

最佳答案

JSF 或 CDI 作用域注释将为您做的就是控制对象的生命周期。也就是说,当第一次引用它时,bean 将被实例化,并执行任何注入(inject)或构造后方法。在 ApplicationScoped 的情况下,它还将确保只生成该对象的一份副本(当然除非您显式创建一个副本)。

话虽如此,您的类的实例与非容器管理的类的实例没有什么不同,因为它与线程安全相关。因此,如果您更改对象的属性,而其他线程假设它们是一致的,则会遇到问题。 IMO 这是同步访问的问题。任何需要原子性并且具有一致的对象 View 的操作都应该采用某种形式的排他锁。

来自 JavaBeans 规范的一些支持 -

2.8 Multi-Threading Java Beans should assume that they are running in a multi-threaded environment and that several different threads may be simultaneously delivering events and/or calling methods and/or setting properties. It is the responsibility of each java bean developer to make sure that their bean behaves properly under multi-threaded access. For simple beans this can generally be handled by simply making all the methods “synchronized”

关于jsf-2 - 应用程序范围 Bean 的线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19402437/

相关文章:

session - 跟踪模式 SSL 与 COOKIE 相比有何优势?

cookies - 如何在 JSF 中添加 cookie?

multithreading - 在另一个线程中设置 bool 值是否安全?

jsf - com.sun.faces.numberOfViewsInSession 与 com.sun.faces.numberOfLogicalViews

具有属性值表达式语言的 JSF 2 自定义组件不会触发属性 setter

javascript - AngularJS,附加到 $scope 的对象不会绑定(bind)到 html 元素

java - Activity 的成员范围和 Asynctask

C++ 和我的鼠标类全局变量

c# - 为什么我没有看到 IDisposable 实现并发的任何实现?

ios - AFNetworking用于图像下载,UI无响应