从封装访问它或来自外部的类内部同步对象是否更好?

时间:2013-01-22 16:19:54

标签: synchronization

想象一个基于单个私有对象变量(简称为Map<Something>)的状态构建的类,其中此类中的所有方法都是获取,设置或以其他方式修改该对象。

您认为两种同步方法中哪一项更好?也许存在第三种更好的选择。

  1. 使类中包含对象的所有方法同步,或者在要修改的对象上进行同步
  2. 使所有访问包含对象的类实例的方法同步。
  3. 换句话说,从内部还是外部同步更好?

1 个答案:

答案 0 :(得分:1)

有权访问Map variable的方法应该包含synchronized(variable) { }块,并且对该变量的所有访问都必须在该块中。当然,variable不能为空。

通过这种方式,您可以更好地处理时间您的代码在受保护的块中花费的时间(例如对variable的读取或写入权限。)

其他方面:如果你的班级有多个要保护的资源,你就不能这样做,因为它们会相互干扰。