当前位置: 代码迷 >> J2SE >> 同步方法跟同步块,哪个是更好的选择
  详细解决方案

同步方法跟同步块,哪个是更好的选择

热度:19   发布时间:2016-04-23 19:54:52.0
同步方法和同步块,哪个是更好的选择?
“ 同步块是更好的选择,因为它不会锁住整个对象(当然你也可以让它锁住整个对象)。同步方法会锁住整个对象,哪怕这个类中有多个不相关联的同步块,这通常会导致他们停止执行并需要等待获得这个对象上的锁。”

各位大哥对这句话怎么理解?  同步块怎么才可以锁住整个对象,好让同一个类中的没有关联的同步代码块,一锁全锁?
------解决思路----------------------
不太同意这一说法。

到底应该用同步块,同步方法完全取决于你的业务逻辑。

同步方法相当于锁了this,范围是整个方法。当你的业务不需要这么做或者不能这么做时,那就用同步块锁适当的对像。

换句话说,你把同步方法理解成同步块的简单写法就是了,业务上可以简单,那就简单点写。
------解决思路----------------------
同步块, 是指在方法里, 针对某个对象进行同步.
public void xxx{
  syncronize(对象){
  }
}
这个同步, 是针对这个 "对象" 进行锁. 在类里面 其他地方的这个 "对象" 也会锁.

方发锁
public void syncironize xxx{
}
是只认加了同步的方法的. 只要有一个有"syncronize"标记的方法在被调用, 其他所有的带有"syncronize"标记的方法都会被同步, 暂停调用, 直到前面的方法运行完.

比较建议同步块好些, 只针对某些对象, 某种操作下进行锁. 因为方法锁有可能出现不相关联的逻辑会有相互影响, 某些情况下对效率有所损失.
  相关解决方案