DataUtil的日期处理

SimpleDateFormat 是线程不安全的类,通常不要定义为 static 变量,若是定义为static,必须加锁,或者使用 DateUtils 工具类。安全

 

解决方法ide

一、将SimpleDateFormat定义成局部变量工具

缺点:每调用一次方法就会建立一个SimpleDateFormat对象,方法结束又要做为垃圾回收。性能

二、方法加同步锁synchronized,在同一时刻,只有一个线程能够执行类中的某个方法。spa

缺点:性能较差,每次都要等待锁释放后其余线程才能进入。线程

三、使用第三方库joda-time,由第三方考虑线程不安全的问题。(能够使用)code

四、使用ThreadLocal:每一个线程拥有本身的SimpleDateFormat对象。(推荐使用)orm


正例:注意线程安全,使用 DateUtils。亦推荐以下处理:对象

private static final ThreadLocal<DateFormat> df = new ThreadLocal<DateFormat>() { 
      @Override 
      protected DateFormat initialValue() { 
         return new SimpleDateFormat("yyyy-MM-dd"); 
      } 
}; 


说明:若是是 JDK8 的应用,能够使用 Instant 代替 Date,LocalDateTime 代替 Calendar,DateTimeFormatter 代替 SimpleDateFormat,官方给出的解释:simple beautiful strongimmutable thread-safe。
 同步

相关文章
相关标签/搜索