当前位置: 代码迷 >> J2SE >> synchronize步骤里面嵌套synchronize(obj)方法块?有必要吗
  详细解决方案

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

热度:74   发布时间:2016-04-23 20:05:32.0
synchronize方法里面嵌套synchronize(obj)方法块???有必要吗
最近看公司以前的代码,现在给出大致的结构
public class demo {
private Object threadLock = new Object();

public synchronized void deal(){

...

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

为什么里面还要在有一个synchronize(threadLock),如果一个线程执行deal方法,就要获得demo实例的对象锁,才会执行,
执行那个代码块需要获得threadLock的对象锁,个人认为没有必要在加这个锁吧。本来外面方法就是同步的。
哪位懂的话解释一下,谢谢。
------解决思路----------------------
确实感觉没必要
------解决思路----------------------
有必要,就是在synchronized this的前提下还有同步竞争,比如说同一个对象里头还有东西要做竞争。
------解决思路----------------------
synchronized 的锁 是this 很明显 你的threadLock? 不是this    同步的其他可能破坏数据的线程
------解决思路----------------------
必须有必要啊。  锁的不是2个东西么?
假设这个类里还有一个方法:
public void anotherDeal(){
         
        ...
         
        synchronized (threadLock) {
            .....
        }
    }
这样就需要了
------解决思路----------------------
1. 首先,这是两个完全不同的锁。同步方法锁的是 this,即Demo对像;同步块里,是另一个ThreadLock。
2. 搞清楚了上面这一点,那么,有没有必要就是你业务逻辑上的事情了。这里的人,都没有办法给你一个准确的答案。