SimpleDateFormat 为什么不是线程安全的?

简介: 大家都说 SimpleDateFormat 不是线程安全的,到底哪里不安全呢?来看 SimpleDateFormat 类的源码注释:

大家都说 SimpleDateFormat 不是线程安全的,到底哪里不安全呢?


来看 SimpleDateFormat 类的源码注释:

image.png


说的很清楚,SimpleDateFormat 不是线程安全的,多线程下需要为每个线程创建不同的实例。


不安全的原因是因为使用了 Calendar 这个全局变量:


image.png

在日期格式化的时候:

image.png


这个 time 就会出现多线程并发设置安全问题,比如 A 线程在执行设置的时候,刚好被 B 线程抢先设置了,这样时间不就错乱了。


其实在阿里巴巴 Java 开发手册中也规范的很清楚:


image.png

如何获取这份完整手册,可以关注公众号:Java核心技术,在后台回复:手册。


解决方法:


其实在阿里巴巴 Java 开发手册中也给出了答案,现在栈长再总结下:


1)尽量使用局部变量;


2)如果要使用全局变量,则需要加锁格式化操作;


3)使用 ThreadLocal 进行线程隔离;


这个面试题摘自《Java技术栈》小程序中的面试题,觉得不错,特别拿出来分享给大家,小程序中我还整理了相当多的面试题及精选答案,一起来在线刷题吧。


相关文章
|
7月前
|
安全 Java 开发者
丢失的8小时去哪里了?SimpleDateFormat线程不安全,多线程初始化异常解决方案
丢失的8小时去哪里了?SimpleDateFormat线程不安全,多线程初始化异常解决方案
110 0
|
存储 安全 Java
解密SimpleDateFormat类的线程安全问题和六种解决方案!
提起SimpleDateFormat类,想必做过Java开发的童鞋都不会感到陌生。没错,它就是Java中提供的日期时间的转化类。这里,为什么说SimpleDateFormat类有线程安全问题呢?有些小伙伴可能会提出疑问:我们生产环境上一直在使用SimpleDateFormat类来解析和格式化日期和时间类型的数据,一直都没有问题啊!接下来,我们就一起看下在高并发下SimpleDateFormat类为何会出现安全问题,以及如何解决SimpleDateFormat类的安全问题。
1813 1
解密SimpleDateFormat类的线程安全问题和六种解决方案!
|
安全 Java API
Java Review - SimpleDateFormat线程不安全原因的源码分析及解决办法
Java Review - SimpleDateFormat线程不安全原因的源码分析及解决办法
207 0
|
存储 安全
解决SimpleDateFormat线程安全问题
SimpleDateFormat是线程不安全的类,一般不要定义为static变量,如果定义为static,必须通过加锁等方式保证线程安全。
354 0
|
存储 安全
解决SimpleDateFormat线程安全问题NumberFormatException: multiple points
解决SimpleDateFormat线程安全问题NumberFormatException: multiple points
111 0
SimpleDateFormat 线程安全问题
SimpleDateFormat 线程安全问题
154 0
SimpleDateFormat 线程安全问题
|
安全
浅谈 SimpleDateFormat,第三方库joda-time,JDK8提供时间类 之性能和线程安全
浅谈 SimpleDateFormat,第三方库joda-time,JDK8提供时间类 之性能和线程安全
浅谈 SimpleDateFormat,第三方库joda-time,JDK8提供时间类 之性能和线程安全
|
缓存 安全 Java
java的SimpleDateFormat线程不安全出问题了,虚竹教你多种解决方案
java的SimpleDateFormat线程不安全出问题了,虚竹教你多种解决方案
246 0
java的SimpleDateFormat线程不安全出问题了,虚竹教你多种解决方案
|
缓存 安全 Java
java的SimpleDateFormat线程不安全出问题了,项目不支持java8,虚竹教你这一招
java的SimpleDateFormat线程不安全出问题了,项目不支持java8,虚竹教你这一招
176 0
java的SimpleDateFormat线程不安全出问题了,项目不支持java8,虚竹教你这一招