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

小飞侠2009 2015-04-07 09:44:52
“ 同步块是更好的选择,因为它不会锁住整个对象(当然你也可以让它锁住整个对象)。同步方法会锁住整个对象,哪怕这个类中有多个不相关联的同步块,这通常会导致他们停止执行并需要等待获得这个对象上的锁。”

各位大哥对这句话怎么理解? 同步块怎么才可以锁住整个对象,好让同一个类中的没有关联的同步代码块,一锁全锁?
...全文
467 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
小飞侠2009 2015-04-08
  • 打赏
  • 举报
回复
引用 3 楼 luxiaoleics 的回复:
同步块, 是指在方法里, 针对某个对象进行同步. public void xxx{ syncronize(对象){ } } 这个同步, 是针对这个 "对象" 进行锁. 在类里面 其他地方的这个 "对象" 也会锁. 方发锁 public void syncironize xxx{ } 是只认加了同步的方法的. 只要有一个有"syncronize"标记的方法在被调用, 其他所有的带有"syncronize"标记的方法都会被同步, 暂停调用, 直到前面的方法运行完. 比较建议同步块好些, 只针对某些对象, 某种操作下进行锁. 因为方法锁有可能出现不相关联的逻辑会有相互影响, 某些情况下对效率有所损失.
引用 3 楼 luxiaoleics 的回复:
同步块, 是指在方法里, 针对某个对象进行同步. public void xxx{ syncronize(对象){ } } 这个同步, 是针对这个 "对象" 进行锁. 在类里面 其他地方的这个 "对象" 也会锁. 方发锁 public void syncironize xxx{ } 是只认加了同步的方法的. 只要有一个有"syncronize"标记的方法在被调用, 其他所有的带有"syncronize"标记的方法都会被同步, 暂停调用, 直到前面的方法运行完. 比较建议同步块好些, 只针对某些对象, 某种操作下进行锁. 因为方法锁有可能出现不相关联的逻辑会有相互影响, 某些情况下对效率有所损失.
谢谢!
糖几颗的 2015-04-08
  • 打赏
  • 举报
回复
同步块, 是指在方法里, 针对某个对象进行同步. public void xxx{ syncronize(对象){ } } 这个同步, 是针对这个 "对象" 进行锁. 在类里面 其他地方的这个 "对象" 也会锁. 方发锁 public void syncironize xxx{ } 是只认加了同步的方法的. 只要有一个有"syncronize"标记的方法在被调用, 其他所有的带有"syncronize"标记的方法都会被同步, 暂停调用, 直到前面的方法运行完. 比较建议同步块好些, 只针对某些对象, 某种操作下进行锁. 因为方法锁有可能出现不相关联的逻辑会有相互影响, 某些情况下对效率有所损失.
benluobo 2015-04-07
  • 打赏
  • 举报
回复
synchronized (this) { } 锁住整个对象
skgary 2015-04-07
  • 打赏
  • 举报
回复
不太同意这一说法。 到底应该用同步块,同步方法完全取决于你的业务逻辑。 同步方法相当于锁了this,范围是整个方法。当你的业务不需要这么做或者不能这么做时,那就用同步块锁适当的对像。 换句话说,你把同步方法理解成同步块的简单写法就是了,业务上可以简单,那就简单点写。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧