【发布时间】:2010-01-19 17:46:31
【问题描述】:
线程安全和不可变对象有什么关系?在多个线程之间共享单个资源是否更容易?如果不可变对象是无状态的,它们是否可以在 J2EE 容器之类的容器中池化?
谢谢
【问题讨论】:
标签: multithreading immutability
线程安全和不可变对象有什么关系?在多个线程之间共享单个资源是否更容易?如果不可变对象是无状态的,它们是否可以在 J2EE 容器之类的容器中池化?
谢谢
【问题讨论】:
标签: multithreading immutability
不可变对象是无法更改的对象。如果无法更改对象,则无需担心竞争线程会在执行线程“背后”更改对象状态,因此不可变对象不需要通过同步或其他技术进行保护。
【讨论】:
线程安全对象是允许多个线程同时访问的对象。它们的实现保证(例如通过锁定/同步方法/...)它们不会进入无效状态。此外,应该不会丢失数据。
不可变对象在创建后不得更改。所以:是的,它们是某种无状态的。
由于不可变对象无法更改,因此无需锁定 - 对对象的读取访问始终是线程安全的(当不修改变量时)。因此,真正的不可变对象总是线程安全的。
【讨论】:
不可变对象:不改变其内部状态的对象。
与线程安全的关系:如果一个对象不能被改变,那么跨线程使用它是安全的,即不需要锁之类的东西来确保跨线程的一致性。
【讨论】: