我在JSF View Scoped Bean中有一个方法doSomething(int param),它只能由一个线程使用,当从另一个线程(另一个用户)调用此方法时,它必须显示用户消息它仍然被第一个线程(第一个用户)使用。
我知道我必须使用“synchronized”但是如何实现这一目标?以及如何在用户调用消息时向用户显示消息?
提前感谢您的帮助。
答案 0 :(得分:0)
在我看来,无论如何,你正在努力防守是不可能的。
根据JSF规范,@ ViewScoped带注释的bean仅存在于一个用户(会话)的上下文中,并且仅在特定视图正在使用的时间内存在。 当另一个用户(或者来自不同浏览器/选项卡的同一用户)进入同一视图时,将创建一个新的bean实例。
视图(@ViewScoped):在用户交互期间,视图范围仍然存在 使用Web应用程序的单个页面(视图)。
@ViewScoped线程安全性出现问题的唯一时间是当应用程序没有实现任何客户端ajax请求排队时,这是你应该考虑在bean中放置一些同步块的唯一情况。
如果不是这种情况,则只考虑@SessionScoped和@ApplicationScoped bean以确保线程安全。