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

来看 SimpleDateFormat 类的源码注释:

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

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

在日期格式化的时候:

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

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

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

解决方法:

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

1)尽量使用局部变量;

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

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

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

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注