,存在鎖定的線程,因爲我得到線程轉儲,它似乎是關於java.util.Calendar類,則使用Calendar.getInstance()
創建對象,該對象返回new
實例。你有任何評論。 這裏是一個線程轉儲的例子;java.util.Calendar.get *和java.util.Calendar.set *在多線程應用程序中阻塞
"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
你是否創建一個日曆對象並在線程之間共享或者你每個線程有一個對象?日曆不是線程安全的,所以你必須做後者。 – shazin 2014-09-22 06:59:48
使用Calendar.getInstance方法爲每個線程創建日曆,該方法返回新的Calendar對象。 – dursun 2014-09-22 07:10:11