大家都说 SimpleDateFormat 不是线程安全的,到底哪里不安全呢?
来看 SimpleDateFormat 类的源码注释:
说的很清楚,SimpleDateFormat 不是线程安全的,多线程下需要为每个线程创建不同的实例。
不安全的原因是因为使用了 Calendar 这个全局变量:
在日期格式化的时候:
这个 time 就会出现多线程并发设置安全问题,比如 A 线程在执行设置的时候,刚好被 B 线程抢先设置了,这样时间不就错乱了。
其实在阿里巴巴 Java 开发手册中也规范的很清楚:
如何获取这份完整手册,可以关注公众号:Java核心技术,在后台回复:手册。
解决方法:
其实在阿里巴巴 Java 开发手册中也给出了答案,现在栈长再总结下:
1)尽量使用局部变量;
2)如果要使用全局变量,则需要加锁格式化操作;
3)使用 ThreadLocal 进行线程隔离;
这个面试题摘自《Java技术栈》小程序中的面试题,觉得不错,特别拿出来分享给大家,小程序中我还整理了相当多的面试题及精选答案,一起来在线刷题吧。
版权申明:本文系公众号 "Java技术栈" 原创,原创实属不易,转载、引用本文内容请注明出处,禁止抄袭、洗稿,请自重,尊重他人劳动成果和知识产权。
近期热文推荐:
1.600+ 道 Java面试题及答案整理(2021最新版)
2.终于靠开源项目弄到 IntelliJ IDEA 激活码了,真香!
3.阿里 Mock 工具正式开源,干掉市面上所有 Mock 工具!
4.Spring Cloud 2020.0.0 正式发布,全新颠覆性版本!
觉得不错,别忘了随手点赞+转发哦!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。