利用ThreadLocal解决SimplaDateFormat线程不安全的问题

在最近的工作中,无意中使用一个SimpleDateFormat把日期时间字符串转换为Date对象,发现存在时间很异常的情况,比如出现时间年份明显不对的情况。

后来在网上查看发现,原来是SimpleDateFormat不是线程安全导致的。后来改写了DateUtil,利用ThreadLocal达到线程安全效果。

ThreadLocal对象一个新线程里第一次被调用时,会调用initialValue方法,后续此线程就会用这个方法返回的对象进行处理,相当于每个线程有一个独立的SimpleDateFormat对象,达到了线程安全的效果。

 1 class DateUtil{
 2     private static ThreadLocal<SimpleDateFormat> threadLocal = new ThreadLocal<SimpleDateFormat>(){
 3         protected SimpleDateFormat initialValue() {
 4             return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 5         }
 6     };
 7     public static  Date parse(String strtime){
 8         try{
 9             return threadLocal.get().parse(strtime);
10         } catch( ParseException e){
11             e.printStackTrace();
12         }
13         return null;
14     }
15 
16     public static String format(Date date){
17         try{
18             return threadLocal.get().format(date);
19         } catch( Exception e){
20             e.printStackTrace();
21         }
22         return null;
23     }
24 
25 
26 }

 

转载于:https://www.cnblogs.com/shuzl/p/5338302.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值