知识卡片
不可变避同步
内容
不可变对象天然线程安全,因为并发读不会破坏状态;修改操作通过返回新对象表达变化。发散:不可变性把同步问题转成复制和共享结构问题,适合读多写少或函数式风格。
参考来源
- 位置:《你真的会写代码吗-2021》第8章《多个厨师一锅饭:线程安全》"8.4 不可变性(Immutable)"(源文件:_epub-src/OEBPS/Text/0018.xhtml)
- 结论依据:原文明确"本章讨论不可变类,因为它们天然是线程安全的。多个线程可以在同一个对象上调用方法,且这些调用不会相互影响,原因很简单:它们不能向同一块内存写数据",并说明修改需通过"写时复制"返回新对象来表达变化。
- 原始内容:线程不安全的根本原因是,一个线程向共享内存写数据,而其他线程也向同一内存位置读或写。实现线程安全有一个完全不同的方法,那就是确保所有的共享对象都是不可变的……本章讨论不可变类,因为它们天然是线程安全的……它们不能向同一块内存写数据……可变类的方法可以改变当前对象的状态,而不可变类的方法会创建并返回一个相同类型的、包含所需内容的新对象。