通俗的讲,所谓线程安全,就是指多个线程使用到了同一个变量,导致计算的结果与各个线程的调用顺序产生直接的关系;
例如:
类名:
SimpleDateFormat
使用场景:
1.SimpleDateFormat类的parse方法,可以将满足格式要求的字符串转换成Date对象
String--------->SimpleDateFormat.parse()-------->Date
2.使用SimpleDateFormat类的format方法,可以将Date类型的对象转换成一定格式的字符串
Date----------->SimpleDateFormat.format--------->String
SimpleDateFormat继承DateFormat类,DateFormat类中维护一个Calendar对象;
SimpleDateFormat转换日期是通过Calendar对象来操作的,即Calendar对象被用于format方法,也被用于parse方法!
但是在parse方法的最后,会调用CalendarBuilder的establish方法,入参就是SimpleDateFormat维护的Calendar实例,在establish方法中会调用calendar的clear方法
SimpleDateFormat维护的用于format和parse方法计算日期-时间的calendar被清空了,如果此时线程A将calendar清空且没有设置新值,线程B也进入parse方法用到了SimpleDateFormat对象中的calendar对象,此时就会产生线程安全问题!
参考:https://blog.csdn.net/weixin_38810239/article/details/79941964