为什么这个类线程安全?

时间:2015-09-16 09:09:15

标签: java multithreading

enter image description here

曾经有过

 public synchronized void deletePerson(Person p)
      { mySet.remove();}
那么它也会保持线程安全吗?

2 个答案:

答案 0 :(得分:5)

此类是线程安全的,因为其中只有一个可变字段(mySet),它是private,并且对它的所有访问都是 synchronized

是的,public synchronized void deletePerson(Person p) { mySet.delete();}仍会保持此类线程安全

另请注意,对mySet的引用并未从此类中转义。这也很重要。

答案 1 :(得分:0)

由于mySet是私有的,并且未通过getMySet方法在类外暴露,因此您只能使用方法addPersoncontainsPerson访问对象的状态和deletePerson

由于这3个方法是同步的,因此在任何给定时间只有其中一个方法可以访问类的实例(并更改其状态),因此该类是线程安全的。

相关问题