0

在多线程应用程序上,有锁定的线程,当我得到线程转储时,它似乎与 java.util.Calendar 类有关,该对象是使用Calendar.getInstance()返回new实例创建的。你有什么意见吗。这是线程转储的示例;

"QuartzScheduler_Worker-128" prio=10 tid=0x00007f48844fe800 nid=0xb75f runnable [0x00007f43f01bd000]
   java.lang.Thread.State: RUNNABLE
       at java.util.SimpleTimeZone.getOffset(SimpleTimeZone.java:656)
       - locked <0x00007f4950c99780> (a java.util.SimpleTimeZone)
       at java.util.SimpleTimeZone.getOffsets(SimpleTimeZone.java:550)
       at java.util.SimpleTimeZone.getOffset(SimpleTimeZone.java:522)
       ...


"QuartzScheduler_Worker-124" prio=10 tid=0x00007f48844f6800 nid=0xb75a waiting for monitor entry [0x00007f43f05c3000]
   java.lang.Thread.State: BLOCKED (on object monitor)
       at java.util.SimpleTimeZone.getOffsets(SimpleTimeZone.java:533)
       - waiting to lock <0x00007f4950c99780> (a java.util.SimpleTimeZone)
       at java.util.SimpleTimeZone.getOffset(SimpleTimeZone.java:522)
       at java.util.SimpleTimeZone.inDaylightTime(SimpleTimeZone.java:834)
       at sun.util.calendar.ZoneInfo.getOffsets(ZoneInfo.java:282)
       ...

编辑:jdk 版本是 1.6._021

4

1 回答 1

0

SimpleTimeZone我认为您只是在两个线程争用共享对象上的锁的那一刻设法进行了线程转储。一个线程持有锁并且可以运行。另一个线程正在等待锁。

在我看来,这没有什么特别值得注意的。

(我在网上找不到与这些行号精确匹配的源代码。但java.util.SimpleTimeZone我能找到的版本并没有显示任何有趣的东西。提示:在 JDK 中,您可以找到准确的 Java 版本正在使用,你应该找到库源代码的 ZIP 文件。看看这个类的源代码....)

于 2014-09-22T07:05:54.277 回答