🕔 日期类

吞佛童子2022年10月10日
  • Java
  • SimpleDateFormat
大约 2 分钟

🕔 日期类

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 修改,因此时间不是 想要的正确时间
    • 从而出现 不同线程下理应不同时间,但是得到的却是 同一时间 的情况

解决方案

  1. 每个线程分配一个 SimpleDateFormat 对象
  2. 给 SimpleDateFormat 对象加锁
  3. 使用 ThreadLocal 变量隔离线程
上次编辑于: 2022/10/10 下午8:43:48
贡献者: liuxianzhishou