什么是不可变对象?

Dun*_*hka 6 multithreading immutability

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

谢谢

Wil*_*ung 10

不可变对象是无法更改的对象.如果某个对象无法更改,则不必担心竞争线程会改变执行线程"后面"的对象状态,因此不需要通过同步或其他技术来保护不可变对象.


Mat*_*ias 5

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

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

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