2012-07-05 106 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