【发布时间】:2016-02-12 21:16:00
【问题描述】:
好的,所以我试图找出为什么某些线程代码会成为瓶颈,并查看线程转储,似乎 java.text.RuleBasedCollator.compare 正在锁定 RuleBasedCollator 对象。
但是,我查看that code,并没有同步的代码部分可以设置此监视器锁定代码。据我所知,Java 中获取锁的唯一方法是在一段同步代码中。下面我包含了 1) 拥有锁的线程和 2) 正在等待它的线程的堆栈转储。如果您需要更多信息,请告诉我。
线程锁定:
Owns Monitor Lock on 0xc6f85460
Java Stack
at sun.text.normalizer.ReplaceableUCharacterIterator.(ReplaceableUCharacterIterator.java:44)
at sun.text.normalizer.UCharacterIterator.getInstance(UCharacterIterator.java:66)
at sun.text.normalizer.NormalizerBase.setText(NormalizerBase.java:985)
at java.text.CollationElementIterator.setText(CollationElementIterator.java:480)
at java.text.RuleBasedCollator.compare(RuleBasedCollator.java:353)
- locked [0xc6f85460] (a java.text.RuleBasedCollator)
at java.text.Collator.compare(Collator.java:310)
at java.util.Arrays.binarySearch0(Arrays.java:2105)
at java.util.Arrays.binarySearch(Arrays.java:2043)
at org.apache.axis.utils.JavaUtils.isJavaKeyword(JavaUtils.java:740)
线程等待锁:
Waiting for Monitor Lock on 0xc6f85460
Java Stack
at java.text.RuleBasedCollator.compare(RuleBasedCollator.java:343)
- waiting to lock [0xc6f85460] (a java.text.RuleBasedCollator)
at java.text.Collator.compare(Collator.java:310)
at java.util.Arrays.binarySearch0(Arrays.java:2105)
at java.util.Arrays.binarySearch(Arrays.java:2043)
at org.apache.axis.utils.JavaUtils.isJavaKeyword(JavaUtils.java:740)
任何见解将不胜感激。
【问题讨论】:
标签: java multithreading locking