synchronize方法里面嵌套synchronize(obj)方法块???有必要吗

LuxBai 2014-12-16 02:50:28
最近看公司以前的代码,现在给出大致的结构
public class demo {
private Object threadLock = new Object();

public synchronized void deal(){

...

synchronized (threadLock) {
.....
}
}
}

为什么里面还要在有一个synchronize(threadLock),如果一个线程执行deal方法,就要获得demo实例的对象锁,才会执行,
执行那个代码块需要获得threadLock的对象锁,个人认为没有必要在加这个锁吧。本来外面方法就是同步的。
哪位懂的话解释一下,谢谢。
...全文
410 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
a8388904 2014-12-17
  • 打赏
  • 举报
回复
synchronized 的锁 是this 很明显 你的threadLock  不是this 同步的其他可能破坏数据的线程
LuxBai 2014-12-17
  • 打赏
  • 举报
回复
谢谢,我明白了,刚才看了一下的确是别的方法里还有同样的操作,所以就加了这样一个锁。我只注意了外面的嵌套。
skgary 2014-12-17
  • 打赏
  • 举报
回复
1. 首先,这是两个完全不同的锁。同步方法锁的是 this,即Demo对像;同步块里,是另一个ThreadLock。 2. 搞清楚了上面这一点,那么,有没有必要就是你业务逻辑上的事情了。这里的人,都没有办法给你一个准确的答案。
a12939026 2014-12-17
  • 打赏
  • 举报
回复
必须有必要啊。 锁的不是2个东西么? 假设这个类里还有一个方法: public void anotherDeal(){ ... synchronized (threadLock) { ..... } } 这样就需要了
LuxBai 2014-12-17
  • 打赏
  • 举报
回复
引用 3 楼 a8388904 的回复:
synchronized 的锁 是this 很明显 你的threadLock  不是this 同步的其他可能破坏数据的线程
能举个例子说下吗谢谢
LuxBai 2014-12-17
  • 打赏
  • 举报
回复
引用 1 楼 ningbohezhijun 的回复:
确实感觉没必要
同步竞争 后还是只是一个线程进入方法内啊,能举个例子说一下吗
ningbohezhijun 2014-12-16
  • 打赏
  • 举报
回复
有必要,就是在synchronized this的前提下还有同步竞争,比如说同一个对象里头还有东西要做竞争。
ningbohezhijun 2014-12-16
  • 打赏
  • 举报
回复
确实感觉没必要

62,614

社区成员

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

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