SimpleDateFormat线程不安全问题处理

在工作中,通过SimpleDateFormat将字符串类型转为日期类型时,发现有时返回的日期类型出错,调用方法如下:

public final class DateUtil {

    static final DateFormat YYYYMMDD_FORMAT = new java.text.SimpleDateFormat("yyyyMMdd");

    /**
     * 把yyyyMMdd格式字符串转换成 java.util.Date
     *
     * @param dateStr
     * @return
     */
    public static java.util.Date getUtilDateByShortStr(String datestr) {
        try {
            return YYYYMMDD_FORMAT.parse(datestr);
        } catch (ParseException e) {
            throw new SasException("error.dateformate");
        }
    }
}

在多线程调用的情况下,返回的日期型数据与传进去的字符串型日期有可能不一致,即SimpleDateFormat是线程不安全的,所以要把以上方法改造成线程安全的:

public final class DateUtil {

    static final DateFormat YYYYMMDD_FORMAT = new java.text.SimpleDateFormat("yyyyMMdd");

    /**
     * 把yyyyMMdd格式字符串转换成 java.util.Date
     *
     * @param dateStr
     * @return
     */
    public synchronized static java.util.Date getUtilDateByShortStr(String datestr) {
        try {
            return YYYYMMDD_FORMAT.parse(datestr);
        } catch (ParseException e) {
            throw new SasException("error.dateformate");
        }
    }
}

 



posted on 2016-12-07 17:01  阿泰555  阅读(154)  评论(0)    收藏  举报

导航