java - 证明旧的 Date Java API 不是线程安全的

标签 java multithreading thread-safety legacy

我一直在寻找代码来演示在多线程环境中使用旧版日期或日历类时可能发生的情况,但我似乎找不到任何好的示例,找到了几个与 DateFormatter 无关,但仅与上述两个类中的任何一个无关,总是提到它们不是线程安全的,但没有代码示例!

有哪位好心人可以举个例子吗?或许可以与线程安全的新 Java 8 Date 类进行比较。

最佳答案

首先,java Date 是可变的并保持状态 -> Date 有可能不是线程安全的。

由于 java Date 包含该字段的状态(transient long fastTime)以及 getter 和 setter,因此 Date 可能不是线程安全的。

但是设置和获取 long 值时不是原子操作吗?如果您在 32 位操作系统中运行代码,则将 long 设置为原始字段不是原子操作,因为 long 和 double 值被视为两个 32 位值,这就是原因。

关于java - 证明旧的 Date Java API 不是线程安全的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51700659/

相关文章:

java - Executor在main中运行后如何完成我的程序

java - 具有并发 put/get 的 EnumMap

java - 同步方法调用后同步是否允许所有变量可见?

java - 如何等待一个长进程的结束(在另一个线程上)?

java - Java 中的 ArrayList 是否可以通过索引锁定单个元素?

java - 线程和线程池的区别

java - 检测 Swing 中的(框架+组件)焦点

java - 当我执行命令release :prepare时,Maven出现问题

linux - 内核如何将线程与进程分离

concurrency - 没有线性化点的方法是否总是无法线性化?