锁的可重入性

锁的可重入性

如果当前线程已经获得了某个监视器对象所持有的锁,那么该线程在该方法中调用另外一个同步方法也同样持有该锁。

比如:

public synchrnozied void test() {
    xxxxxx;
    test2();
}
 
public synchronized void test2() {
    yyyyy;
}

在上面代码段中,执行 test 方法需要获得当前对象作为监视器的对象锁,但方法中又调用了 test2 的同步方法。

如果锁是具有可重入性的话,那么该线程在调用 test2 时并不需要再次获得当前对象的锁,可以直接进入 test2 方法进行操作。

如果锁是不具有可重入性的话,那么该线程在调用 test2 前会等待当前对象锁的释放,实际上该对象锁已被当前线程所持有,不可能再次获得。

如果锁是不具有可重入性特点的话,那么线程在调用同步方法、含有锁的方法时就会产生死锁。锁的可重入性最大的作用就是为了避免死锁。

synchronizedReentrantLock都是可重入锁。

上一篇:Java 简易框架


下一篇:Spring 的 BeanUtils 踩到的那些坑