2015-05-05 74 views
3

如果一个对象在Java中是线程安全的,如果它的类不包含可以更改的实例变量并且没有静态变量,那么可以安全地使用它吗?一个对象是否可以说是线程安全的?

+0

是的,它是安全的! – Avia

+5

它是安全的......除非它扩展了一个不是的类! – Seelenvirtuose

+0

是的,这样的对象将是线程安全的。但是,当然,一个类可以有实例变量并且有静态变量,并且* ALSO *是线程安全的。关键问题:“对象的'状态'是如何管理的?”看看这里:[什么是线程安全代码?](http://stackoverflow.com/questions/261683/what-is-meant-by-thread-safe-code) – FoggyDay

回答

4

完全安全,只要它不扩展非线程安全的类。

如果一个对象是无状态的,它可以安全地由多个线程共享。

这也是为什么鼓励在多线程环境中使用不可变对象的原因,因为它们的状态不能被同时修改。

+3

是的,但事实上,类一个对象不包含变量实例字段并不意味着该对象是无状态的。你也需要超类来验证。 – Joffrey

+0

嗨吉恩,谢谢你的回复!所以,如果有人问,让我们说,一个对象是线程安全的还是不是?那么人们可以看看它的课堂,并通过查看状态来给出答案。如果我错了,请纠正我! – Prasad

+1

@Prasad你也必须看看它的超类。那么,如果这些也是无国籍的,你可以说它是安全的。 **然而**,拥有一个状态并不意味着它不是*线程安全的,你必须研究更多的领域是如何访问的。 – Joffrey

相关问题