2013-01-22 88 views
1

想象一下,构建一个围绕单个私有对象变量(可以说是Map<Something>)的状态的类,该类中的所有方法都要获取,设置或以其他方式修改该对象。从类内部同步对象来封装对象访问还是从外部访问对象更好?

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

  1. 制作类中的所有方法,它封装了对象同步,或在物体上同步被修改
  2. 请访问然后封装同步的对象的类的实例中的所有的方法。

换句话说,从内部还是外部进行同步更好?

回答

1

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

这种方式可以处理时间,最好你的代码花费在保护块(例如读取或写入访问variable)。

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

+0

没错。这就是我所说的'或者在被修改的对象上同步'。那么,根据你的回答,“内部”是一个更好的选择呢? –

+0

是的,在这个意义上,#1是首选。可能有更多的原因,这些是最重要的国际海事组织。 – gaborsch