这看起来像是一个特别讨厌的僵局。如果没有更多信息,很难确定。不过,这是我在没有代码的情况下看到的:
“Text Viewer Hover Presenter”和“Worker-3”之间的对象引用 0x00002aace2276720 可能出现死锁(或至少争用),而“Worker-3”正在锁定引用 0x00002aace2276ad0。
第二个引用似乎是一大堆阻塞线程(特别是“Worker-4”、“Worker-1”和“Worker-0”)的原因。
我的建议是检查 ASTProvider.java 第 450 行(请参阅前两个堆栈跟踪,其中可疑对象锁似乎被持有但似乎没有超过 wait())。我还建议尝试运行锁定到单核的可执行文件(假设这是一个多核系统)。
看起来值得测试的下一段代码是 SelectionListenerWithASTManager.java 第 153 行(其中引用 0x00002aace2276ad0 被锁定,导致 Workers 阻塞)。
0x00002aace2276720 的储物柜:
"Text Viewer Hover Presenter" daemon prio=10 tid=0x00002aad20166400 nid=0x51f4 in Object.wait() [0x000000004254c000..0x000000004254dd90]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00002aace2276720> (a java.lang.Object)
at java.lang.Object.wait(Object.java:485)
at org.eclipse.jdt.internal.ui.javaeditor.ASTProvider.getAST(ASTProvider.java:450)
- locked <0x00002aace2276720> (a java.lang.Object)
at org.eclipse.jdt.ui.SharedASTProvider.getAST(SharedASTProvider.java:129)
at org.eclipse.jdt.internal.ui.text.java.hover.NLSStringHover.getHoverInfo(NLSStringHover.java:87)
at org.eclipse.jdt.internal.ui.text.java.hover.AbstractJavaEditorTextHover.getHoverInfo2(AbstractJavaEditorTextHover.java:86)
at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:129)
at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:82)
at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:166)
"Worker-3" prio=10 tid=0x00002aad132c3800 nid=0x5166 in Object.wait() [0x0000000042249000..0x000000004224ab10]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00002aace2276720> (a java.lang.Object)
at java.lang.Object.wait(Object.java:485)
at org.eclipse.jdt.internal.ui.javaeditor.ASTProvider.getAST(ASTProvider.java:450)
- locked <0x00002aace2276720> (a java.lang.Object)
at org.eclipse.jdt.ui.SharedASTProvider.getAST(SharedASTProvider.java:129)
at org.eclipse.jdt.internal.ui.viewsupport.SelectionListenerWithASTManager$PartListenerGroup.calculateASTandInform(SelectionListenerWithASTManager.java:168)
at org.eclipse.jdt.internal.ui.viewsupport.SelectionListenerWithASTManager$3.run(SelectionListenerWithASTManager.java:153)
- locked <0x00002aace2276ad0> (a java.lang.Object)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
在 0x00002aace2276ad0 被阻止
"Worker-4" prio=10 tid=0x00002aad132c4000 nid=0x5167 waiting for monitor entry [0x000000004234b000..0x000000004234bc90]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.eclipse.jdt.internal.ui.viewsupport.SelectionListenerWithASTManager$3.run(SelectionListenerWithASTManager.java:153)
- waiting to lock <0x00002aace2276ad0> (a java.lang.Object)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
"Worker-1" prio=10 tid=0x00002aad12835800 nid=0x5164 waiting for monitor entry [0x0000000041a42000..0x0000000041a42a10]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.eclipse.jdt.internal.ui.viewsupport.SelectionListenerWithASTManager$3.run(SelectionListenerWithASTManager.java:153)
- waiting to lock <0x00002aace2276ad0> (a java.lang.Object)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
"Worker-0" prio=10 tid=0x00002aad11a0ac00 nid=0x5146 waiting for monitor entry [0x0000000041941000..0x0000000041941d90]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.eclipse.jdt.internal.ui.viewsupport.SelectionListenerWithASTManager$3.run(SelectionListenerWithASTManager.java:153)
- waiting to lock <0x00002aace2276ad0> (a java.lang.Object)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)