当前位置: 首页 > news >正文

免费网站模版下载wordpress企业网站插件

免费网站模版下载,wordpress企业网站插件,com网站域名,注册公司代理记账费用Java可重入锁是Java并发编程中常用的一种锁机制#xff0c;它可以允许同一个线程多次获取同一个锁#xff0c;从而避免死锁和其他并发问题。在本篇博客中#xff0c;我们将对Java可重入锁的源码进行分析#xff0c;以便更好地理解它的实现原理和使用方法。 Java可重入锁的…Java可重入锁是Java并发编程中常用的一种锁机制它可以允许同一个线程多次获取同一个锁从而避免死锁和其他并发问题。在本篇博客中我们将对Java可重入锁的源码进行分析以便更好地理解它的实现原理和使用方法。 Java可重入锁的实现原理 Java可重入锁的实现基于AQSAbstractQueuedSynchronizer框架它是Java并发包中的一个重要组件。AQS框架提供了一种通用的同步机制可以用于实现各种锁和同步器。Java可重入锁就是基于AQS框架实现的。 Java可重入锁的实现主要包括以下几个部分 锁状态 Java可重入锁的状态由一个整型变量state表示它表示锁的持有次数。当state为0时表示锁没有被任何线程持有当state大于0时表示锁被某个线程持有且持有次数为state。 获取锁 当一个线程尝试获取Java可重入锁时它会首先尝试获取锁的状态。如果state为0则表示锁没有被任何线程持有此时该线程可以直接获取锁并将state设置为1。如果state大于0则表示锁已经被某个线程持有此时需要判断持有锁的线程是否为当前线程。如果是当前线程则可以直接获取锁并将state加1如果不是当前线程则需要将当前线程加入等待队列并等待锁的释放。 释放锁 当一个线程释放Java可重入锁时它会将锁的状态state减1。如果state减为0则表示锁已经完全释放此时需要唤醒等待队列中的一个线程让它获取锁。如果state仍然大于0则表示锁还被某个线程持有此时只需要将state减1即可。 可重入性 Java可重入锁支持可重入性即同一个线程可以多次获取同一个锁而不会造成死锁或其他并发问题。实现可重入性的关键在于每个线程需要记录自己已经获取锁的次数以便在释放锁时正确地减少锁的持有次数。 Java可重入锁的源码分析 下面我们来看一下Java可重入锁的源码实现。Java可重入锁的主要实现类是ReentrantLock它继承了AQS框架的抽象类AbstractQueuedSynchronizer。 锁状态 Java可重入锁的状态由一个整型变量state表示它定义在AbstractQueuedSynchronizer类中 private volatile int state;获取锁 当一个线程尝试获取Java可重入锁时它会调用tryAcquire方法。该方法首先会判断锁的状态state是否为0如果是则表示锁没有被任何线程持有此时可以直接获取锁并将state设置为1。如果state不为0则需要判断持有锁的线程是否为当前线程。如果是当前线程则可以直接获取锁并将state加1如果不是当前线程则需要将当前线程加入等待队列并等待锁的释放。 protected final boolean tryAcquire(int acquires) {Thread current Thread.currentThread();int c getState();if (c 0) {if (compareAndSetState(0, acquires)) {setExclusiveOwnerThread(current);return true;}} else if (current getExclusiveOwnerThread()) {int nextc c acquires;if (nextc 0) // overflowthrow new Error(Maximum lock count exceeded);setState(nextc);return true;}return false; }释放锁 当一个线程释放Java可重入锁时它会调用tryRelease方法。该方法会将锁的状态state减1。如果state减为0则表示锁已经完全释放此时需要唤醒等待队列中的一个线程让它获取锁。如果state仍然大于0则表示锁还被某个线程持有此时只需要将state减1即可。 protected final boolean tryRelease(int releases) {int c getState() - releases;if (Thread.currentThread() ! getExclusiveOwnerThread())throw new IllegalMonitorStateException();boolean free false;if (c 0) {free true;setExclusiveOwnerThread(null);}setState(c);return free; }可重入性 Java可重入锁支持可重入性即同一个线程可以多次获取同一个锁而不会造成死锁或其他并发问题。实现可重入性的关键在于每个线程需要记录自己已经获取锁的次数以便在释放锁时正确地减少锁的持有次数。Java可重入锁通过ThreadLocal变量来记录每个线程已经获取锁的次数。 private static final class HoldCounter {int count 0;final long tid getThreadId(Thread.currentThread()); }private transient ThreadLocalHoldCounter holdCounts new ThreadLocalHoldCounter();private int getHoldCount() {HoldCounter rh holdCounts.get();return (rh null) ? 0 : rh.count; }private void setHoldCount(int count) {HoldCounter rh holdCounts.get();if (rh null) {rh new HoldCounter();holdCounts.set(rh);}rh.count count; }总结 Java可重入锁是Java并发编程中常用的一种锁机制它可以允许同一个线程多次获取同一个锁从而避免死锁和其他并发问题。Java可重入锁的实现基于AQS框架它通过状态变量state和等待队列来实现锁的获取和释放。Java可重入锁支持可重入性即同一个线程可以多次获取同一个锁而不会造成死锁或其他并发问题。
http://www.hkea.cn/news/14519464/

相关文章:

  • 针对不同网站的cdn加速做牛排的网站
  • 酒店网站建设策划思南县住房和城乡建设局网站
  • 公司网站开发的核心技术做爰全过程免费狐狸网站
  • 网站设计原则镇江网站营销推广
  • 互动平台网站网站建设支出
  • 手机网站模版免费下载呼市网站设计
  • 网站建设 碧辉腾乐企业集团网站源码
  • 如何制作网站和软件电子邮件免费注册
  • 淮安市住房和城乡建设局网站网页设计的标准尺寸
  • 关键词优化网站排名移动端网站建设原则
  • c2c网站架构个人网站开发盈利模式
  • 广东万泰建设有限公司网站腾讯云 云服务器
  • 外贸工作上班一般都干嘛seo文案范例
  • 深圳市专业网站建设网业协同心得体会运营商
  • 保定做网站设计十大金融公司排名
  • 爱站网关键词密度网站建设 开发
  • 企业活动网站创意案例做网站的业务分析
  • 我想找个郑州做网站的商丘住房和城乡建设网站
  • 新余教育网站建设肇庆市手机网站建设品牌
  • 网站小图标素材企业网站源码 html5+xml
  • dede网站后缀乱码网站模板 可做采集站
  • 网站受攻击建设网站的意义
  • 网站价格网页制作wordpress 文章背景
  • 个人网站建设方法WordPress 头像下拉功能
  • 网站防止采集电商小程序名字大全
  • 网站优化平台高端网红
  • 低价手机网站建设长沙网站建设网
  • 网站静态和动态区别是什么海天建设集团网站
  • 宁夏网站建设费用地址平面设计和电子商务哪个好
  • 企业站seo点击软件上海南建设培训执业中心网站