好的,所以我正在试图找出为什么某些线程代码是瓶颈,看看线程转储,java.text.RuleBasedCollator.compare似乎锁定了一个RuleBasedCollator对象。
但是,我查看了那个密码,并且没有同步的代码部分可以设置代码上的监视器锁。据我所知,在Java中获得锁的唯一方法是在一段同步代码中。下面我包含了拥有锁的线程和等待锁的线程的堆栈转储。如果你需要更多的信息,告诉我。
持有锁的线程:
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)任何洞察力都将不胜感激。
发布于 2016-08-16 17:17:54
您没有说明您使用的是哪个版本的Java,但是在Java 8中,RuleBasedCollator中的比较方法是同步的:
public synchronized int compare(String source, String target)这可以解释你看到的线程转储。
https://stackoverflow.com/questions/35372322
复制相似问题