又一次卡住了。卡的严严实实。
- waiting to lock <0x00000000868b00b8> (a ch.qos.logback.core.util.CachingDateFormatter)
- waiting to lock <0x00000000868b00b8> (a ch.qos.logback.core.util.CachingDateFormatter)
- waiting to lock <0x00000000868b00b8> (a ch.qos.logback.core.util.CachingDateFormatter)
- waiting to lock <0x00000000868b00b8> (a ch.qos.logback.core.util.CachingDateFormatter)
- waiting to lock <0x00000000868b00b8> (a ch.qos.logback.core.util.CachingDateFormatter)
- waiting to lock <0x00000000868b00b8> (a ch.qos.logback.core.util.CachingDateFormatter)
- locked <0x00000000868b00b8> (a ch.qos.logback.core.util.CachingDateFormatter)
- waiting to lock <0x00000000868b00b8> (a ch.qos.logback.core.util.CachingDateFormatter)
- waiting to lock <0x00000000868b00b8> (a ch.qos.logback.core.util.CachingDateFormatter)
- waiting to lock <0x00000000868b00b8> (a ch.qos.logback.core.util.CachingDateFormatter)
- waiting to lock <0x00000000868b00b8> (a ch.qos.logback.core.util.CachingDateFormatter)
- waiting to lock <0x00000000868b00b8> (a ch.qos.logback.core.util.CachingDateFormatter)
- waiting to lock <0x00000000868b00b8> (a ch.qos.logback.core.util.CachingDateFormatter)
- waiting to lock <0x00000000868b00b8> (a ch.qos.logback.core.util.CachingDateFormatter)
- waiting to lock <0x00000000868b00b8> (a ch.qos.logback.core.util.CachingDateFormatter)
代码位置 (sdf.format(new Date(now)); ):
/**
* A synchronized implementation of SimpleDateFormat which uses caching internally.
*
* @author Ceki Gülcü
* @since 0.9.29
*/
public class CachingDateFormatter {
long lastTimestamp = -1;
String cachedStr = null;
final SimpleDateFormat sdf;
public CachingDateFormatter(String pattern) {
sdf = new SimpleDateFormat(pattern);
}
public final String format(long now) {
// SimpleDateFormat is not thread safe.
// See also the discussion in http://jira.qos.ch/browse/LBCLASSIC-36
// DateFormattingThreadedThroughputCalculator and SelectiveDateFormattingRunnable
// are also noteworthy
// The now == lastTimestamp guard minimizes synchronization
synchronized (this) {
if (now != lastTimestamp) {
lastTimestamp = now;
cachedStr = sdf.format(new Date(now));
}
return cachedStr;
}
}