Date Conversion with ThreadLocal

后端 未结 2 1441
无人及你
无人及你 2021-01-05 00:44

I have a requirement to convert incoming date string format \"20130212\" (YYYYMMDD) to 12/02/2013 (DD/MM/YYYY)

using ThreadLocal. I know a way to do th

相关标签:
2条回答
  • 2021-01-05 01:37

    ThreadLocal in Java is a way to achieve thread-safety apart from writing immutable classes. Since SimpleDateFormat is not thread safe, you can use a ThreadLocal to make it thread safe.

    class DateFormatter{
    
        private static ThreadLocal<SimpleDateFormat> outDateFormatHolder = new ThreadLocal<SimpleDateFormat>() {
        @Override
        protected SimpleDateFormat initialValue() {
            return new SimpleDateFormat("MM/dd/yyyy");
        }
    };
    
    private static ThreadLocal<SimpleDateFormat> inDateFormatHolder = new ThreadLocal<SimpleDateFormat>() {
        @Override
        protected SimpleDateFormat initialValue() {
            return new SimpleDateFormat("yyyyMMdd");
        }
    };
    
    public static String formatDate(String date) throws ParseException { 
        return outDateFormatHolder.get().format(
                inDateFormatHolder.get().parse(date));
    }        
    }
    
    0 讨论(0)
  • 2021-01-05 01:49

    The idea behind this is that SimpleDateFormat is not thread-safe so in a mutil-threaded app you cannot share an instance of SimpleDateFormat between multiple threads. But since creation of SimpleDateFormat is an expensive operation we can use a ThreadLocal as workaround

    static ThreadLocal<SimpleDateFormat> format1 = new ThreadLocal<SimpleDateFormat>() {
        @Override
        protected SimpleDateFormat initialValue() {
            return new SimpleDateFormat("yyyy-MM-dd");
        }
    };
    
    public String formatDate(Date date) {
        return format1.get().format(date);
    }
    
    0 讨论(0)
提交回复
热议问题