0

我们在 weblogic10.3.4 中部署了 JSF2.1 应用程序,在我们的一个支持 bean 中,当我们尝试将引用 ArrayList 分配给 List 实例时,weblogic 最终在 Struck 线程中,在我们应用程序的流量高峰期间。

java.util.ArrayList.indexOf(ArrayList.java:210)
java.util.ArrayList.contains(ArrayList.java:199)

任何人以前都面临过这个问题。

4

1 回答 1

1

您的意思并不完全清楚,因此我假设您的意思是“卡住的线程”,并且该线程在某种意义上被卡住了,因为它在那一点上不断执行。

我能想到三个可能的原因。

  • 正在搜索的对象有一个错误的equals(Object)方法,在某些情况下会进入无限循环。

  • 有两个(或更多)线程大致同时访问和/或更新列表,并且您没有正确同步。如果您没有正确同步,则线程可能会看到数据结构的不一致视图,这将导致它以看似不可能的方式运行。

  • 您以某种方式设置了一种病态情况,导致一个线程在(不正确的)认为它具有两个不同列表的情况下读取和更新列表。

我敢打赌,这是第二个问题,因为当您的服务器负载过重时,更有可能发生类似的“heisenbugs”。


最后,线程可能没有处于无限循环中,而只是需要很长时间才能完成某件事。并且循环可能涉及其他代码,但每次你看它都是在那个时候。

于 2012-07-05T16:05:56.723 回答