如何理解阿里开发规范中这句话?SimpleDateFormat 是线程不安全的类,一般不要定义为static变量

阿里巴巴JAVA开发手册 1.3.1版本中

一编程规范

(六)并发处理

5.【强制】SimpleDateFormat 是线程不安全的类,一般不要定义为static变量,如果定义为static,必须加锁,或者使用DateUtils工具类。

我主要是无法理解后面这句话,“一般不要定义为Static变量”,

为什么?普通的SimpleDateFormat 变量和 Static的SimpleDateFormat 变量在使用上有什么区别吗?

各位能理解的大大们能否用代码举例说明一下,
将SimpleDateFormat 定义为普通变量和静态变量在开发中会有什么区别,会遇到什么问题?

扬帆大鱼
浏览 859回答 4
4回答

倚天杖

“一般不要定义为Static变量”,这是为了防止不安全的SimpleDateFormat实例被意外泄漏导致线程安全性问题。但是泄漏实例或者共享实例的方式有很多,不管是否使用static修饰,只要可变实例被多线程共享即不安全。不要定义为static变量只是一种良好的规范,但并不能阻止实例被多线程共享。

三国纷争

class ThreadDemo extends Thread { private static int x=0; public void run() { //... test(); } public void test () { x++; } } 静态变量可以被所有ThreadDemo的实例访问到,因此可能会出现同时访问的情形。如果没有做好进程同步的话,可能会出现冲突,因此不是线程安全的。但是非静态的变量就是每个实例对应一个了,不会出现多个线程同时访问的情况。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java