查看 SimpleDateFormat
的文档注释:
SimpleDateFormat is not thread-safe. Users should create a separate instance for each thread.
说 SimpleDateFormat
不是线程安全的,需要为每一个线程创建一个单独的实例来用。为什么是线程不安全的?写个例子试试就知道。
执行结果如下:
如何避免:
(1)方法的局部变量
有两种方法,写一个单独的方法,然后将 SimpleDateFormat
作为方法的成员变量,每个线程需要格式化时间的时候,就去调用这个方法,SimpleDateFormat
作为方法的成员变量,自然就不存在资源共享的问题了。但是每次调用这个方法就去 new 一个 SimpleDateFormat
对性能来说也是一个开销。
(2)使用ThreadLocal
第二种方法是使用 ThreadLocal
来存放 SimpleDateFormat
。ThreadLocal
的特性决定了每个线程操作 ThreadLocal
中的值,不会影响到别的线程