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. }  

 系统正常跑动。

你可能感兴趣的:(java,多线程,DateFormat)