最近看公司以前的代码,现在给出大致的结构
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. 搞清楚了上面这一点,那么,有没有必要就是你业务逻辑上的事情了。这里的人,都没有办法给你一个准确的答案。