在本书中,它有以下示例,它只同步插入,但没有同步查找。我知道currentIndex将在插入后指向不同的对象,但是是指向不同对象的操作原子?例如,假设指针是8字节(在64位机器上),那么在某些时候currentIndex将切换指针,但是如果那个开关不是原子的,比如它首先切换前4个字节,然后切换第二个4字节,如果在第一个和第二个开关之间,我们查找数据,那么指向一个对象的指针永远不存在,这将导致问题
class ImmutableService[Key, Value] extends Service[Key, Value] {
var currentIndex = new ImmutableHashMap[Key,Value]
def lookUp(k: Key): Option[Value] = currentIndex.get(k)
def insert(k: Key, v: Value): Unit = synchronized {
currentIndex = currentIndex + ((k, v))
}
}
答案 0 :(得分:0)
是的,currentIndex是一个引用 - 因此对它的更改将以原子方式完成。
检查: