【发布时间】:2018-08-27 09:45:05
【问题描述】:
我总是听到人们说,在使用多个线程时管理不可变对象会更容易,因为当一个线程访问一个不可变对象时,不必担心另一个线程正在更改它。
好吧,如果我有一个公司所有员工的不可变列表并且雇用了一位新员工,会发生什么?在这种情况下,必须复制不可变列表,并且它的新副本必须包含另一个员工对象。然后对员工列表的引用应指向新列表。
当这种情况发生时,列表本身并没有改变,但是对这个列表的引用发生了变化,因此代码“看到”了不同的数据。
如果是这样,我不明白为什么在使用多线程时不可变对象会使我们的生活更轻松。我错过了什么?
【问题讨论】:
-
不存在不一致的可能性。任何线程都可以处理旧引用或新引用,但绝不会混合新旧数据。