阿里巴巴JAVA开发手册 1.3.1版本中
一编程规范
(六)并发处理
5.【强制】SimpleDateFormat 是线程不安全的类,一般不要定义为static变量,如果定义为static,必须加锁,或者使用DateUtils工具类。
我主要是无法理解后面这句话,“一般不要定义为Static变量”,
为什么?普通的SimpleDateFormat 变量和 Static的SimpleDateFormat 变量在使用上有什么区别吗?
各位能理解的大大们能否用代码举例说明一下,
将SimpleDateFormat 定义为普通变量和静态变量在开发中会有什么区别,会遇到什么问题?
“一般不要定义为Static变量”,这是为了防止不安全的SimpleDateFormat实例被意外泄漏导致线程安全性问题。但是泄漏实例或者共享实例的方式有很多,不管是否使用static修饰,只要可变实例被多线程共享即不安全。不要定义为static变量只是一种良好的规范,但并不能阻止实例被多线程共享。