【问题标题】:Weblogic Stuck Thread - ArrayListWeblogic卡住的线程 - ArrayList
【发布时间】:2012-07-05 15:31:21
【问题描述】:

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

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

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

【问题讨论】:

    标签: java jsf-2 weblogic-10.x


    【解决方案1】:

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

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

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

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

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

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


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

    【讨论】:

    • 感谢您的详细回答,我的问题出在我自定义的 equals 方法上。
    • 确保如果你覆盖equals,你也覆盖hashcode。请参阅 Effective Java 示例章节中的第 8 项:java.sun.com/developer/Books/effectivejava/Chapter3.pdf
    • @BestPractices - 你能指出任何证据表明 OP 还不知道这一点,和/或他还没有这样做吗?
    • 抱歉,这是对 OP 的有用提示,因为她/他提到了他/她的 equals 方法的实现问题。仅此而已...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    相关资源
    最近更新 更多