DateFormat的多線程不安全

最近一個程序中,多線程調用sdf.format(date) ,經常獲得的時間錯誤,剛開始以爲是自己程序邏輯有問題 後來經過查閱資料,發現dateFormat不是線程安全的,因此 加上線程安全synchronized 後運行,正常

Java代碼  

spacer.gif

  1. /** 

  2.  * @author onedear 

  3.  * 

  4.  */  

  5. public final class DateUtil {  

  6.       

  7.     private static DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  

  8.       

  9.     public static  String dateToString(Date date) {  

  10.         return sdf.format(date);  

  11.     }  

  12.   

  13.     /** 

  14.      * 返回天key 

  15.      * @return  

  16.      */  

  17.     public static Date getDayTime(Date date) {  

  18.         Calendar cal = new GregorianCalendar();  

  19.         cal.setTime(date);  

  20.         cal.set(Calendar.MINUTE, 0);  

  21.         cal.set(Calendar.HOUR_OF_DAY, 0);  

  22.         cal.set(Calendar.SECOND, 0);  

  23.         cal.set(Calendar.MILLISECOND, 0);  

  24.         return cal.getTime();  

  25.     }   

  26.       

  27. }  


那異常數據肯定是被其他線程修改了,最後改成

Java代碼  

spacer.gif

  1. public static synchronized String dateToString(Date date) {  

  2.         return sdf.format(date);  

  3. }  

 系統正常跑動。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章