内部锁

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mottohlm/article/details/81089066

内部锁(又叫监视器锁)

synchronized 块 是Java 中用来实现原子性的锁机制。synchronized 块由 锁对象的引用+保护的代码块 两部分组成。

获得内部锁的唯一途径是进入到该同步块保护的代码或方法。

正常退出或抛出异常都会释放锁。

持有锁是互斥的,最多只能有一个线程能获得锁。

内部锁有一个特性:可重进入 。一个线程请求其他线程已占有的锁时,请求的线程会被阻塞;但一个线程在请求自己线程已占有的锁时,是会请求成功的,这就是重进入。内部锁是可以重进入的。每个锁会关联一个请求计数和一个占有它的线程。如果请求线程与占有它的线程一样,那就会请求成功,计数+1。释放锁自然就是计数-1,直到计数为0就算完全释放。

重进入这个设置有什么意义呢,当一个对象在A方法中要调B方法时(这两个方法都使用了synchronized同步),如果没有重入锁,那将永远卡在进入B方法前,因为B方法锁的持有对象就是A方法的持有对象,自己就拿着在那等,谁来释放啊。

猜你喜欢

转载自blog.csdn.net/mottohlm/article/details/81089066