“ 同步块是更好的选择,因为它不会锁住整个对象(当然你也可以让它锁住整个对象)。同步方法会锁住整个对象,哪怕这个类中有多个不相关联的同步块,这通常会导致他们停止执行并需要等待获得这个对象上的锁。”
各位大哥对这句话怎么理解? 同步块怎么才可以锁住整个对象,好让同一个类中的没有关联的同步代码块,一锁全锁?
------解决思路----------------------
不太同意这一说法。
到底应该用同步块,同步方法完全取决于你的业务逻辑。
同步方法相当于锁了this,范围是整个方法。当你的业务不需要这么做或者不能这么做时,那就用同步块锁适当的对像。
换句话说,你把同步方法理解成同步块的简单写法就是了,业务上可以简单,那就简单点写。
------解决思路----------------------
同步块, 是指在方法里, 针对某个对象进行同步.
public void xxx{
syncronize(对象){
}
}
这个同步, 是针对这个 "对象" 进行锁. 在类里面 其他地方的这个 "对象" 也会锁.
方发锁
public void syncironize xxx{
}
是只认加了同步的方法的. 只要有一个有"syncronize"标记的方法在被调用, 其他所有的带有"syncronize"标记的方法都会被同步, 暂停调用, 直到前面的方法运行完.
比较建议同步块好些, 只针对某些对象, 某种操作下进行锁. 因为方法锁有可能出现不相关联的逻辑会有相互影响, 某些情况下对效率有所损失.