Java 文档有关 SimpleDateFormat 的描述:
“日期格式是非同步的。
建议为每个线程创建单独的日期格式化实例。
如果多个线程并发访问某个格式化实例,则必须保证外部调用同步性。“
正如文档中提到的那样,可以为每个线程设置不同实例来解决这个问题。如果要共享实例,该如何实现?
1. ThreadLocal
可以使用 ThreadLocal 解决。Threadlocal 的 get() 方法会给当前线程提供正确的值。
2.JDK 8 新API
Java8 引入了新的日期时间 API,SimpleDateFormat 有了更好的替代者。如果继续坚持使用 SimpleDateFormat 可以配合 ThreadLocal 一起使用。但既然已经有了更好的选择,还是考虑用新的 API。
Java 8 提供了几个线程安全的日期类,Java 文档中这么描述:
“这个类是具有不可变和线程安全的特点。”
非常值得学习这些类的用法,包括 DateTimeFormatter、OffsetDateTime、ZonedDateTime、LocalDateTime、LocalDate 和 LocalTime。
还没有评论,来说两句吧...