与线程安全和不可变对象的关系是什么?在多个线程之间共享单个资源是否更容易?如果不可变对象是无状态的,它们是否可以集成在像J2EE容器这样的容器中?
感谢
答案 0 :(得分:10)
不可变对象是无法更改的对象。如果一个对象无法更改,那么不必担心竞争线程会改变执行线程“后面”的对象状态,因此不需要通过同步或其他技术来保护不可变对象。 / p>
答案 1 :(得分:5)
Threadsafe对象是允许多个线程同时访问的对象。它们的实现保证(例如通过锁定/同步方法/ ......)它们不会进入无效状态。此外,不应丢失数据。
不可变对象在创建后不得更改。所以:是的,他们是某种无国籍人。
由于无法更改不可变对象,因此无需锁定 - 对对象的读取访问始终是线程安全的(不修改变量时)。因此,真正的不可变对象始终是线程安全的。
答案 2 :(得分:4)
不可变对象:不改变其内部状态的对象。
与线程安全的关系:如果一个对象无法变异,则可以安全地跨线程使用它,即不需要锁定等来确保跨线程的一致性。