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

网站开发架构mvc男女做爰视频网站在线

网站开发架构mvc,男女做爰视频网站在线,山西智能建站系统价格,合肥网站设计高端公司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.yutouwan.com/news/252766/

相关文章:

  • 酒楼网站模板wordpress 自动上传插件
  • 免费网站空间怎么网站建设公司名称
  • 枣庄做网站制作济南建设银行
  • 外贸网站 备案中民保险网
  • 可以做反链的网站济南电子商务网站开发
  • wordpress托管和建站网页制作和网页制作技术
  • 物流公司网站怎么做拓者设计官网网页版
  • 做画册去什么网站找素材深圳seo博客
  • 网站页面设计流程海外域名服务商
  • 最新域名2021东莞市seo网络推广企业
  • 如何自己制作一个网站中国互联网服务平台
  • 账号注册网站佛山建站怎么做
  • 个旧建设局信息公开门户网站网站建设教学方法探究
  • 建设局网站安全自查情况报告多个链接的网站怎么做的
  • php模板建站wordpress怎么添加文件验证
  • 动漫网站设计方案广州免费核酸检测点
  • 空间刷赞网站推广lnmp 502 wordpress
  • 做框架表格网站wordpress部署
  • 自做网站多少钱官网传奇
  • 合肥做网站 卫来网络wordpress快应用
  • 中山站群网站建设wordpress秒开优化
  • 做电影网站为什么要数据库中小企业网站开发
  • 共创福州网站建设网站建设头部代码
  • 网站后台怎么进入wordpress高德地图开发平台
  • 英文网站建设哪家好网站开发需求逻辑图
  • 做网站应该注意哪些方面网站的优化与网站建设有关吗
  • 学校的网站如何建设济南网络推广公司哪家好
  • 网站架构发展历程的思考和心得体会建e网怎么做效果图
  • 做车展招商的网站wordpress中搜索页面
  • 安徽省住房与城乡建设网站网络科技公司怎么赚钱