什么是不可变对象?

时间:2010-01-19 17:46:31

标签: multithreading immutability

与线程安全和不可变对象的关系是什么?在多个线程之间共享单个资源是否更容易?如果不可变对象是无状态的,它们是否可以集成在像J2EE容器这样的容器中?

感谢

3 个答案:

答案 0 :(得分:10)

不可变对象是无法更改的对象。如果一个对象无法更改,那么不必担心竞争线程会改变执行线程“后面”的对象状态,因此不需要通过同步或其他技术来保护不可变对象。 / p>

答案 1 :(得分:5)

Threadsafe对象是允许多个线程同时访问的对象。它们的实现保证(例如通过锁定/同步方法/ ......)它们不会进入无效状态。此外,不应丢失数据。

不可变对象在创建后不得更改。所以:是的,他们是某种无国籍人。

由于无法更改不可变对象,因此无需锁定 - 对对象的读取访问始终是线程安全的(不修改变量时)。因此,真正的不可变对象始终是线程安全的。

答案 2 :(得分:4)

不可变对象:不改变其内部状态的对象。

与线程安全的关系:如果一个对象无法变异,则可以安全地跨线程使用它,即不需要锁定等来确保跨线程的一致性