并发(一):理解可重入锁
来源:互联网 发布:朝鲜人眼中的中国知乎 编辑:程序博客网 时间:2024/06/15 20:34
在JAVA中,内置锁都是可重入的,也就是说,如果某个线程试图获取一个已经由它自己持有的锁时,那么这个请求会立刻成功,并且会将这个锁的计数值加1,而当线程退出同步代码块时,计数器将会递减,当计数值等于0时,锁释放。
看例子,一目了然:
new Thread() { /* (non-Javadoc) * @see java.lang.Thread#run() */ @Override public void run() { // 第一次获得锁 synchronized(this) { while(true) { // 第二次获得同样的锁 synchronized(this) { System.out.println("ReteenLock!"); } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }}.start();
如果没有可重入锁的支持,在第二次企图获得锁时将会进入死锁状态。在实际的代码中,我们可能不会这么写代码,但是可重入锁依旧随处可见,如下:
public class PartBuilder { public synchronized void buildPart_1() { } public synchronized void buildPart_2() { } /** * 很明显的可重入锁用法 */ public synchronized void buildPart() { this.buildPart_1(); this.buildPart_2(); }}
在上面的例子中,进入buildPart()方法时已经获取了对象锁,在调用buildPart_1()时又再次获取对象锁,此时对象的锁计数值已经达到2了。
结论
JAVA的可重入锁提升了加锁行为的封装性,大大简化了面向对象并发代码开发的难度。
阅读全文
1 0
- 并发(一):理解可重入锁
- 深入理解并发(一)
- 线程并发一:概念理解
- 并发理解
- 深入理解memcached,高并发、懒惰与LRU(一)
- 【Java并发编程】深入理解Java内存模型(一)
- 深入理解memcached,高并发、懒惰与LRU(一)
- 并发编程之ThreadLocal类的理解(一)
- 理解高并发(8).可重入锁RetreenLock用法
- java并发理解
- 并行与并发理解
- 理解并行和并发
- 理解多线程并发
- CopyOnWriteArrayList并发理解
- Storm并发度理解
- Java并发volatile理解
- 理解并发,避免死锁
- 并发编程概念理解
- 保护个人隐私,你需要养成这8个习惯
- 《Linux内核设计与实现》学习笔记1——进程管理
- ORACLE笔记二
- 获取js异步函数的返回值
- springmvc和DWR的整合
- 并发(一):理解可重入锁
- Struts2 介绍和应用
- Java并发编程:认识线程组
- Hive自定义UDF和聚合函数UDAF
- 关于Installation failed的情况及解决方案
- Git常用命令
- 初识小波变换(一)
- 浅谈Three.js源码-render之WebGLBackground.js
- okhttp3.0使用https访问网络