阿里巴巴JAVA开发手册 1.3.1版本中
一编程规范
(六)并发处理
5.【强制】SimpleDateFormat 是线程不安全的类,一般不要定义为static变量,如果定义为static,必须加锁,或者使用DateUtils工具类。
我主要是无法理解后面这句话,“一般不要定义为Static变量”,
为什么?普通的SimpleDateFormat 变量和 Static的SimpleDateFormat 变量在使用上有什么区别吗?
各位能理解的大大们能否用代码举例说明一下,将SimpleDateFormat 定义为普通变量和静态变量在开发中会有什么区别,会遇到什么问题?
4 回答

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

三国纷争
TA贡献1804条经验 获得超7个赞
class ThreadDemo extends Thread {
private static int x=0;
public void run() {
//...
test();
}
public void test () {
x++;
}
}
静态变量可以被所有ThreadDemo
的实例访问到,因此可能会出现同时访问的情形。如果没有做好进程同步的话,可能会出现冲突,因此不是线程安全的。但是非静态的变量就是每个实例对应一个了,不会出现多个线程同时访问的情况。
添加回答
举报
0/150
提交
取消