synchronized内置锁的可重入性:

线程同步synchronized中内置的“锁”机制是可重入锁,即一个线程取得某对象的锁,释放后其他线程还可以使用此锁,即可以重复使用。

如果某一个线程试图获取一个已经由它持有的锁时,这个请求会立刻成功并使锁的计数器加一;而当线程逐步退出同步时计数器将会递减,计数器值为0时,锁释放。若锁没有实现可重入性,多线程同步时将进入死锁状态。

模拟可重入锁的实现:

public class 可重入锁 {Lock lock = new Lock();public void aThread() throws InterruptedException {lock.lock();lock.getCountHold();doSomething();lock.unLocked();lock.getCountHold();}public void doSomething() throws InterruptedException {lock.lock();lock.getCountHold();//...............lock.unLocked();lock.getCountHold();}public static void main(String[] args) throws InterruptedException {可重入锁 test = new 可重入锁();test.aThread();}
}
//可重入锁
class Lock {private boolean isLocked = false;private int countHold = 0;// 计数器private Thread lockedBy = new Thread();//使用锁public synchronized void lock() throws InterruptedException {Thread t = Thread.currentThread();while(isLocked&&t!=lockedBy){wait();}isLocked = true;countHold++;lockedBy = t;}//释放锁public synchronized void unLocked() {if(Thread.currentThread()==lockedBy){countHold--;if(countHold==0){isLocked = false;lockedBy = null;notify();}}}public void getCountHold() {System.out.println(countHold);}
}

Java 可重入锁ReenTrant相关推荐

  1. Java 可重入锁内存可见性分析

    转载自 深度好文 | Java 可重入锁内存可见性分析 一个习以为常的细节 之前在做 ReentrantLock 相关的试验,试验本身很简单,和本文相关的简化版如下:(提示:以下代码均可左右滑动) p ...

  2. java可重入锁与不可重入锁

    所谓重入锁,指的是以线程为单位,当一个线程获取对象锁之后,这个线程可以再次获取本对象上的锁,而其他的线程是不可以的. synchronized 和   ReentrantLock 都是可重入锁. 可重 ...

  3. Java 可重入锁 不可重入锁

    文章目录 Java 可重入锁 & 不可重入锁 概述 论证synchronized是可重入锁: 论证Lock是可重入锁: 自定义不可重入锁: Java 可重入锁 & 不可重入锁 概述 可 ...

  4. java可重入锁是什么意思_Java中的可重入(Reentrant)锁

    ## 什么是可重入锁? 可重入锁是一种特殊的互斥锁,它可以被同一个线程多次获取,而不会产生死锁. 1. 首先它是互斥锁:任意时刻,只有一个线程锁.即假设A线程已经获取了锁,在A线程释放这个锁之前,B线 ...

  5. java代码如何避免死锁,Java可重入锁如何避免死锁

    看到一个问题,Java的可重入锁为什么可以防止死锁呢?网上看了看资料,虽然有答案说出了正确答案,但是分析的不够详细,对初学者不够友好.这里我再做一个更清晰的分析. 首先是示例代码: 1 public ...

  6. Java多线程——重入锁ReentrantLock源码阅读

    上一章<AQS源码阅读>讲了AQS框架,这次讲讲它的应用类(注意不是子类实现,待会细讲). ReentrantLock,顾名思义重入锁,但什么是重入,这个锁到底是怎样的,我们来看看类的注解 ...

  7. java 可重入锁 clh_Java并发编程系列-(4) 显式锁与AQS

    4 显示锁和AQS 4.1 Lock接口 核心方法 Java在java.util.concurrent.locks包中提供了一系列的显示锁类,其中最基础的就是Lock接口,该接口提供了几个常见的锁相关 ...

  8. java 可重入锁 clh_Java可重入锁原理

    一. 概述 本文首先介绍Lock接口.ReentrantLock的类层次结构以及锁功能模板类AbstractQueuedSynchronizer的简单原理,然后通过分析ReentrantLock的lo ...

  9. java多线程---重入锁ReentrantLock

    1.定义 重入锁ReentrantLock,支持重入的锁,表示一个线程对资源的重复加锁. 2.底层实现 每个锁关联一个线程持有者和计数器,当计数器为0时表示该锁没有被任何线程持有,那么任何线程都可能获 ...

最新文章

  1. 在 M1 芯片 Mac 中使用原生 Java 优雅地玩 Minecraft
  2. 服务器事件刷新消息,Windows Server 2003 中的 DNS 事件消息 1616 到 6702
  3. mysql物理备份迁移注意细节_物理拷贝备份mysql到其他机器上恢复
  4. 定时插座动一下就断_使用插座定时器在某些时候自动将您的Amazon Echo静音
  5. ORACLE JDBC 对千万数据 批量删除和批量插入
  6. 【网络基础】路由表,分组转发算法
  7. 【Mac】Mac iTerm2 使用笔记 远程连接
  8. [转]IE6对!important支持不彻底
  9. Windows的图形设备接口(GDI)入门 上篇
  10. 【电子商务法】北邮国际学院大三上期末复习
  11. 设置Parallels Desktop中的Windows虚拟机使用Mac宿主机代理
  12. 我在汉语编程留言,确引来了一顿臭骂,气愤之后,贴出来让大家评,目的让更多的人知道forth
  13. apache、iis6、ii7独立ip主机屏蔽拦截蜘蛛抓取(适用vps云主机服务器)
  14. 【路由协议】和【应用协议】
  15. 傻瓜式文章一键伪原创工具
  16. 如何解决条码打印机隔张打印问题
  17. 【渝粤教育】电大中专学前儿童社会教育_1作业 题库
  18. 数字孪生核电站促进界面监测的应用实践
  19. pid控制温度c语言,C语言编写PID温度控制程序
  20. 网站静态化--谈谈网站静态化

热门文章

  1. 无人驾驶对经济、社会和环境的影响
  2. Flame diagram
  3. 小论中英文网站的设计差异
  4. 业界 | 如果技术从业者上岗前也要宣誓,一份给程序员的希波克拉底誓言
  5. Win10系统重启Windows资源管理器explorer.exe的方法
  6. Android 微信分享图片(好友和朋友圈)
  7. 到底什么是Web Server什么是HTTP server?什么是application server?
  8. 僵尸计算机,第二课 事件-僵尸[计算机科学入门(Minecraft)]
  9. 计算机主板电池没电什么情况,主板电池没电了会出现什么情况
  10. 从wireshark中导出视频流