我们在weblogic10.3.4中部署了JSF2.1应用程序,在我们的一个支持bean中,当我们尝试将引用ArrayList分配给List实例时,weblogic最终在Struck线程中,在我们应用程序的高峰流量期间。 / p>
java.util.ArrayList.indexOf(ArrayList.java:210)
java.util.ArrayList.contains(ArrayList.java:199)
之前任何人都遇到过这个问题。
答案 0 :(得分:1)
你的意思并不完全清楚,所以我假设你的意思是“卡住的线程”,并且该线程在某个意义上被卡住了,因为它在那一点上不断执行。
我可以想到三个可能的原因。
正在搜索的对象有一个错误的equals(Object)
方法,在某些情况下进入无限循环。
有两个(或更多)线程大致同时访问和/或更新列表,并且您没有正确同步。如果您没有正确同步,则线程可能会看到数据结构的不一致视图,并且这会导致它以一种看似不可能的方式运行。
你以某种方式设置了一个病态情况,导致一个线程同时读取和更新列表(不正确)认为它有两个不同的列表。
我敢打赌,这是第二个问题,因为当你的服务器负载很重时,更像是“heisenbugs”。
最后,线程可能不是无限循环,但只是花了很长时间才能做某事。并且循环可能涉及其他代码,但每次你看它都是在那时。