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。
 同步

相關文章
相關標籤/搜索