java simpledateformat是线程安全的吗
答案:2 悬赏:20 手机版
解决时间 2021-04-08 22:49
- 提问者网友:别再叽里呱啦
- 2021-04-08 14:38
java simpledateformat是线程安全的吗
最佳答案
- 五星知识达人网友:掌灯师
- 2021-04-08 15:52
是线程不安全的,如果是多线程访问,就new对象,不要用static
全部回答
- 1楼网友:行雁书
- 2021-04-08 16:18
这样定义成全局的static变量是线程不安全的。
原因如下:
simpledateformat类内部有一个calendar对象引用,它用来储存和这个sdf相关的日期信息,例如sdf.parse(datestr), sdf.format(date) 诸如此类的方法参数传入的日期相关string, date等等, 都是交由calendar引用来储存的.这样就会导致一个问题,如果你的sdf是个static的, 那么多个thread 之间就会共享这个sdf, 同时也是共享这个calendar引用, 并且, 观察 sdf.parse() 方法,你会发现有如下的调用:
date parse() {
calendar.clear(); // 清理calendar
// 执行一些操作, 设置 calendar 的日期什么的
calendar.gettime(); // 获取calendar的时间
}
这里会导致的问题就是, 如果 线程a 调用了 sdf.parse(), 并且进行了 calendar.clear()后还未执行calendar.gettime()的时候,线程b又调用了sdf.parse(), 这时候线程b也执行了sdf.clear()方法, 这样就导致线程a的的calendar数据被清空了(实际上a,b的同时被清空了). 又或者当 a 执行了calendar.clear() 后被挂起, 这时候b 开始调用sdf.parse()并顺利i结束, 这样 a 的 calendar内存储的的date 变成了后来b设置的calendar的date。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯