SimpleDateFormat线程不安全 【坑】

SimpleDateFormat

public static final String DATE_PARTEN = "yyyy-MM-dd HH:mm:ss";
public static final String DAY_PARTEN = "yyyy-MM-dd";

/**
 * 线程安全转换 String -> Date
 */
public static Date safeParseDate(String dateStr) throws ParseException {
    return getDateFormat().parse(dateStr);
}

/**
 * 线程安全格式化 Date -> String
 */
public static String safeFormatDate(Date date) {
    return getDateFormat().format(date);
}

/**
 * 线程安全转换 String -> Date
 */
public static Date safeParseDay(String dateStr) throws ParseException {
    return getDayFormat().parse(dateStr);
}

/**
 * 线程安全格式化 Date -> String
 */
public static String safeFormatDay(Date date) {
    return getDayFormat().format(date);
}

/**
 * 借助ThreadLocal完成对每个线程第一次调用时初始化SimpleDateFormat对象
 */
private static ThreadLocal<SimpleDateFormat> threadDateLocal = new ThreadLocal<SimpleDateFormat>() {
    protected synchronized SimpleDateFormat initialValue() {
        return new SimpleDateFormat(DATE_PARTEN);
    }
};

/**
 * 获取当前线程中的安全SimpleDateFormat对象
 */
private static DateFormat getDateFormat() {
    return (DateFormat) threadDateLocal.get();
}

/**
 * 借助ThreadLocal完成对每个线程第一次调用时初始化SimpleDateFormat对象
 */
private static ThreadLocal<SimpleDateFormat> threadDayLocal = new ThreadLocal<SimpleDateFormat>() {
    protected synchronized SimpleDateFormat initialValue() {
        return new SimpleDateFormat(DAY_PARTEN);
    }
};

/**
 * 获取当前线程中的安全SimpleDateFormat对象
 */
private static DateFormat getDayFormat() {
    return (DateFormat) threadDayLocal.get();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值