2012-07-05 107 views
0

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

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

以前任何人都遇到过这个问题。

+0

你的意思是“卡住的线程”? – 2012-07-05 15:48:52

+0

是卡住线程 – user684434 2012-07-05 16:01:03

回答

1

这并不完全清楚你的意思,所以我会假定你的意思是“卡住的线程”,并且线程被卡住了,因为它在那个点上不断执行。

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

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

  • 有两个(或更多)线程大致同时访问和/或更新列表,并且您没有正确同步。如果您没有正确同步,那么线程会看到数据结构的不一致视图,并且这会导致其行为似乎不可行。

  • 你已经以某种方式设置了一种病态,导致一个线程同时读取和更新列表中的(不正确)相信它有两个不同的列表。

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


最后,有可能线程不在无限循环中,而是需要很长时间来做某件事情。循环可能涉及其他代码,但是每次看到它时都是这样。

+0

感谢您的详细答案,我的问题是我的自定义等于方法。 – user684434 2012-07-05 16:21:59

+0

确保如果您覆盖等于,您也覆盖散列码。请参阅Effective Java的示例章节中的第8项:http://java.sun.com/developer/Books/effectivejava/Chapter3.pdf – BestPractices 2012-07-05 17:58:51

+0

@BestPractices - 您能否指出OP尚未知道的任何证据,和/或他还没有这样做? – 2012-07-05 23:03:21