其他分享
首页 > 其他分享> > SimpleDateFormat的线程安全问题

SimpleDateFormat的线程安全问题

作者:互联网

一、案例

在多线程环境中共享了SimpleDateFormat的实例,例如SimpleDateFormat对象作为单例对象中的全局属性、或者 SimpleDateFormat对象是被static修饰的全局属性。

二、分析

通过源码分析, SimpleDateFormat类内部有一个Calendar对象,用来存储相关日期信息。当多个线程同时使用相同的SimpleDateFormat对象的时候,会同时调calender.setTime方法,导致time被别的线程修改,因此是线程不安全的。

三、解决方案

1、将SimpleDateFormat定义成局部变量
缺点:每调用一次就会创建一个对象,方法结束时垃圾回收
2、加线程同步锁
缺点:性能较差
3、使用ThreadLocal,每个线程都拥有自己的SimpleDateFormat对象副本
4、使用DateTimeFormatter代替, DateTimeFormatter是线程安全的

四、总结

在多线程环境下,需要注意共享变量的线程安全问题。

标签:对象,SimpleDateFormat,安全,线程,DateTimeFormatter,多线程
来源: https://blog.csdn.net/m0_54359434/article/details/112644798