栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在JSF saveState()期间,线程在HashMap中停留在100%CPU使用率

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在JSF saveState()期间,线程在HashMap中停留在100%CPU使用率

这个,

java.lang.Thread.State: RUNNABLE    at java.util.HashMap.hash(HashMap.java:351)    at java.util.HashMap.putForCreate(HashMap.java:512)    at java.util.HashMap.putAllForCreate(HashMap.java:534)    at java.util.HashMap.<init>(HashMap.java:320)

还有这个,

java.lang.Thread.State: RUNNABLE    at java.util.HashMap.getEntry(HashMap.java:446)    at java.util.HashMap.get(HashMap.java:405)

是已知的线程安全问题,

java.util.HashMap
其中一个线程
get()
同时调用另一个线程同时调用a
put()
。线程将在计算哈希值时陷入无限循环。解决此问题的技术方法是改用
ConcurrentMap
实现。另请参见此dzone文章。

但是,根据您的具体情况,

    at java.util.HashMap.<init>(HashMap.java:320)    at org.ajax4jsf.component.UIDataAdaptorbase.createChildStateCopy(UIDataAdaptorbase.java:894)    at org.ajax4jsf.component.UIDataAdaptorbase.saveState(UIDataAdaptorbase.java:1554)    at org.richfaces.component.UIDataTable.saveState(UIDataTable.java:181)    at org.richfaces.component.html.HtmlDataTable.saveState(HtmlDataTable.java:1361)    at javax.faces.component.UIComponentbase.processSaveState(UIComponentbase.java:1103)

当您

<rich:dataTable>
要保存组件的状态时,此问题似乎很明显。这又表明该组件的同一实例正在由多个线程访问。这是不对的,
UIComponent
该类从一开始就从来没有被设计为线程安全的。这反过来表明所讨论的组件实例未按JSF规范的要求进行作用域限定。例如,当您
binding
用于将组件绑定到会话作用域或什至是应用程序作用域的bean或更糟糕的是静态字段时,可能会发生这种情况。

<x:someComponent ... binding="#{nonRequestScopedBean.someComponent}">

您应该在代码库中查找这样的组件,并通过确保bean是请求范围的,或通过对需求/问题使用不同的解决方案(您认为使用

binding
此方法是正确的解决方案)来进行相应的修复。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/498288.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号