内部锁synchronized ----重进入(Reentrancy)
来源:互联网 发布:海洋cms漏洞 编辑:程序博客网 时间:2024/05/29 13:34
一、可重进入的概念 ( Reentrancy )
当一个线程请求其他线程已经占有的锁时,请求线程会被阻塞。然而 java 的内部锁 synchronized 是可重进入的,因此线程在试图获得它自己占有的锁时,请求会成功。
重进入是指请求是基于线程的,而不是基于调用的。重进入的实现是通过每个锁关联一个请求计数和一个占有它的线程。当计数为0时,认为锁是未被占用的。线程请求一个未被占用的锁时, JVM 将记录锁的占有者,并将请求计数置为1。如果同一线程再次请求这个锁,计数将递增;每次占用线程退出同步块,计数器值将递减。直到计数器达到0时,锁被释放。
二、可重进入的意义
重进入方便了锁行为的封装,因此简化了面向对象并发代码的开发。例如下面的代码,子类覆写了父类 synchronized 类型的方法,并调用了父类中的方法。如果没有可重入的锁,这段看上去没问题的代码就会产生死锁。因为 Widget 和 LoggingWidget 中的 doSomething 方法都是 synchronized 类型的,都会在处理前试图获得 Widget 的锁。如果内部锁不是可重入的, super.doSomething 的调用者将永远无法得到 Widget 的锁,因为锁已经被占用,导致线程会永久地延迟,等待着一个永远无法获得的锁。重进入帮助我们避免了这种死锁。
public class Widget{ public synchronized void doSomething(){ ... }}public class LoggingWidget extends Widget{ public synchronized void doSomething(){ System.out.println(toString() + ":calling doSomething"); super.doSomething(); }}
阅读全文
0 0
- 内部锁synchronized ----重进入(Reentrancy)
- Java内部锁的可重用性(Reentrancy)
- java 内部锁的可重用性(Reentrancy)
- Reentrancy
- Java锁的可重入性(Reentrancy)
- Java锁的可重入性(Reentrancy)
- synchronized锁的重入问题
- Java内部锁(synchronized)中类锁和对象锁
- synchronized(内部锁)关键字——线程学习七
- synchronized的重入
- 使用电脑+MODEM 订火车票 (可以一直自动重拨) 黄牛党/铁路内部人员不得进入!!!
- gdb老是进入函数内部
- 进入OpenCV内部源码调试
- Apache 内部重定向
- 互斥同步器 ReentrantLock和内部锁 synchronized 的性能对比
- 2.2.4方法内部使用synchronized(this)
- linux 重启进入grub
- Introduction To Reentrancy
- 使用AndroidStudio push自己克隆的代码到github时报403错误的解决方法
- 图解MotionEvent中getRawX、getRawY与getX、getY以及View中的getScrollX、getScrollY
- Spring整合Retrofit2x
- FQCN是什么鬼
- java二维码--QRCode解析问题
- 内部锁synchronized ----重进入(Reentrancy)
- 在项目中遇到的几个异常
- EtherCAT Slave Implement
- 支持向量机学习笔记(2)合页损失函数
- 端口汇聚(Trunk)
- 前端学习日记~字符串的操作方法
- 在一个千万级的数据库查寻中,如何提高查询效率?
- [ 杂题 ] Codeforces875F Royal Questions
- web容器启动加载顺序(listener、 filter、servlet 加载顺序及其详解)