今天在自己的项目中遇到了SimpleDateFormat线程安全的问题,参考其他项目的DateUtil里把SimpleDateFormat都声明为
1 | public static final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); |
但是这样存在一个线程完全的问题,原因是因为 DateFormat 和 SimpleDateFormat 类不都是线程安全的,在多线程环境下调用 format() 和 parse() 方法可能会获得我们意料之外的结果,甚至抛出异常。
在程序中我们应当尽量少的创建SimpleDateFormat 实例,因为创建这么一个实例需要耗费很大的代价,然后再丢弃这个对象。大量的对象就这样被创建出来,占用相当一部分的内存和 JVM空间。