public class LockTest {
static ReentrantLock lock = new ReentrantLock();
public void m1(){
lock.lock();
try {
m2();
}finally {
lock.unlock();
}
}
private void m2() {
//既然m1已经加锁了,为什么m2还需要加锁?不加锁一样能够保证m1调用m2的安全性
lock.lock();
try {
System.out.println("同步代码块");
}finally {
lock.unlock();
}
}
}
在这段代码中,m1调用了m2,既然m1已经加锁了,为什么还要给m2加锁?
原因是 既然m2独立出来成了一个方法,你就没法保证你在调用m1的方法的同时,别的人不通过m1调用m2,而是直接调用m2。如果m2不加锁,这里就必然会出现线程安全问题。