🕔 日期类
2022年10月10日
- Java
🕔 日期类
1. SimpleDateFormat
1) parse(String source)
非线程安全 源码分析
解决方法
2) format(Date date)
源码分析
- format(Date date) 函数中,通过
calendar.setTime(date);
对 calendar 对象进行修改 - 当另一线程也对同一 calendar 对象修改时,也会修改成功
- 若在时间片下,线程 1 修改时间为线程 1 设置的时间;然后切换到线程 2,同样对 calendar 对象修改为线程 2 设置的时间;
- 然后,线程 1 恢复,得到的时间,被线程 2 修改,因此时间不是 想要的正确时间
- 从而出现 不同线程下理应不同时间,但是得到的却是 同一时间 的情况
解决方案
- 每个线程分配一个 SimpleDateFormat 对象
- 给 SimpleDateFormat 对象加锁
- 使用 ThreadLocal 变量隔离线程