为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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

4 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

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

查看完整回答
反对 回复 2019-03-01
?
三国纷争

TA贡献1804条经验 获得超7个赞

class ThreadDemo extends Thread {
  private static int x=0;
  
  public void run() {
    //...
    test();
  }
  
  public void test () {
    x++;
  }
}

静态变量可以被所有ThreadDemo的实例访问到,因此可能会出现同时访问的情形。如果没有做好进程同步的话,可能会出现冲突,因此不是线程安全的。但是非静态的变量就是每个实例对应一个了,不会出现多个线程同时访问的情况。

查看完整回答
反对 回复 2019-03-01
  • 4 回答
  • 0 关注
  • 858 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号