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

怀化买房网站电商网站前端设计方案

怀化买房网站,电商网站前端设计方案,dedecms如何做音乐网站,免费建靓号网站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.hyszgw.com/news/89681.html

相关文章:

  • 清河做网站哪里好wordpress 博客主题推荐
  • 电脑培训学校课程百度seo快速
  • 最新网站推广广州网站 制作信科便宜
  • 母婴网站dede织梦苏州seo公司 翼好
  • 网站移动端做pc端的301跳转萍乡网站设计公司
  • 山东省住房与建设厅网站首页yahoo搜索
  • 成都网站建设公司招聘十元精品店做网站
  • 官方网站建站上海八号桥 网站建设
  • 淘宝联盟网站建设源码英文网站建设980
  • 长沙专业网站建设服务wordpress打开速度慢解决办法
  • 骏域网站建设专家东莞微平台推广
  • 网站源码 一品资源网wordpress连接谷歌
  • 有了源码然后如何做网站5118网站
  • 莱芜在线老板是谁太原seo团队
  • 网站 内容 不收录 权重 1php做的直播网站
  • 淄博网站制作定制改版中国建设银行官网站企业网银下载
  • .湖南省建设厅规范网站seo站长工具箱
  • 做网站怎么租个域名wordpress 最简单模板
  • 个人网站网站服务器江苏盐城建筑公司网站
  • 网站建设分几步网站备案是先做网站还是做完了备案
  • 单页销售网站模板购物网站名称
  • 商城网站前置审批wordpress插件vpn
  • 沈阳做网站有名公司阿里云WordPress主题
  • 网站在建设中无法访问中信建设有限责任公司企业资质
  • 网站一般费用深圳市住房和建设局网上办事大厅
  • cp网站开发搭建一般网址的正确格式
  • wordpress网站源码公众号微信平台官网
  • 外贸小语种网站建设Wordpress编辑主页页面
  • 交互式网站制作磁力引擎
  • 亿景网站建设电子商务专业介绍