假设我有一个共享对象 field data
。多个线程将共享对该对象的引用以访问该字段。但是,线程永远不会同时访问对象。我需要声明data
为 volatile 吗?
这种情况如下:
- 一个类
Counter
定义了一个唯一的字段value
和一个方法increment
。 - 一个线程增加计数器,然后产生另一个增加计数器的线程,等等。
鉴于程序的逻辑,没有对计数器的并发访问。然而,计数器是跨多个线程共享的。计数器必须是易失性的吗?
这种情况的另一种变体是当多个线程操作一个纯数据对象 X 时,但通过另一个依赖于并发控制 ( wait
, notify
, ) 的对象 Y 交替执行它们的时间执行(这样 X 永远不会同时访问synchronize
)。对象 X 的字段应该是可变的吗?