答案 0 :(得分:5)
此类是线程安全的,因为其中只有一个可变字段(mySet
),它是private
,并且对它的所有访问都是 synchronized 。
是的,public synchronized void deletePerson(Person p) { mySet.delete();}
仍会保持此类线程安全。
另请注意,对mySet
的引用并未从此类中转义。这也很重要。
答案 1 :(得分:0)
由于mySet
是私有的,并且未通过getMySet
方法在类外暴露,因此您只能使用方法addPerson
,containsPerson
访问对象的状态和deletePerson
。
由于这3个方法是同步的,因此在任何给定时间只有其中一个方法可以访问类的实例(并更改其状态),因此该类是线程安全的。