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

设计师联盟官网效果图百色seo外包

设计师联盟官网效果图,百色seo外包,和平区网站建设,网页制作软件简介目录 AQS是什么AQS什么样内部类成员变量方法public如果不使用AQS会怎样 AQS的应用ReentrantLockSyncNonfairSyncFairSync 其他实现 AQS是什么 AbstractQueuedSynchronizer(AQS)是Java中的一个并发工具,位于java.util.concurrent.locks包中&a…

目录

    • AQS是什么
    • AQS什么样
      • 内部类
      • 成员变量
      • 方法public
      • 如果不使用AQS会怎样
    • AQS的应用
      • ReentrantLock
        • Sync
        • NonfairSync
        • FairSync
      • 其他实现

AQS是什么

AbstractQueuedSynchronizer(AQS)是Java中的一个并发工具,位于java.util.concurrent.locks包中,用于实现基于锁的同步机制。它是许多同步类(如ReentrantLockSemaphore等)的基础,并提供了一种用于实现独占锁(exclusive locks)和共享锁(shared locks)等同步机制的框架。

AQS是一个抽象类,它通过维护一个等待队列来管理线程的同步状态。它的主要设计思想是,当某个线程尝试获取锁时,如果锁不可用,该线程会被放入等待队列,然后被阻塞。当锁释放时,AQS会从等待队列中唤醒适当的线程,使其能够竞争锁。

AQS什么样

内部类

类名作用
NodeNode类表示等待队列中的一个节点,用于构建等待队列、实现线程的阻塞与唤醒,以及表示等待线程。
ExclusiveNodeExclusiveNodeNode类的子类,表示独占模式(exclusive mode)下的节点,用于独占锁的等待队列。
SharedNodeSharedNodeNode类的子类,表示共享模式(shared mode)下的节点,用于共享锁的等待队列。
ConditionNodeConditionNodeNode类的子类,表示条件等待队列中的节点,用于支持条件变量的等待和唤醒机制。
ConditionObjectConditionObjectAbstractQueuedSynchronizer的内部类,用于实现条件变量,允许线程等待特定条件。

这些内部类在AbstractQueuedSynchronizer的实现中扮演着不同的角色,从构建等待队列、表示等待线程、实现条件等待机制,到支持不同模式的锁等待。通过这些内部类的使用,AQS能够支持各种同步场景和锁的实现,从而实现多线程的协调和同步。

成员变量

先看看AQS里都有哪些成员变量:
当然,我可以为您解释这些成员变量的作用。以下是您列出的成员变量的简要解释和作用的表格展示:

变量名变量类型变量作用
WAITINGint表示线程处于等待状态,即等待获取锁。
CANCELLEDint表示线程在等待队列中等待时被取消,即等待被中断或其他原因取消。
CONDNode一个特殊的标识,用于表示等待队列中的节点是一个条件等待节点而不是独占或共享模式的节点。
headNode等待队列中的头节点,即队列中等待时间最长的节点。
tailNode等待队列中的尾节点,即队列中等待时间最短的节点。
stateint表示同步状态的变量,可以是任意整数值,根据具体实现的需要来表示不同的状态。
UUnsafe提供了一些底层的操作,允许直接对内存进行操作,用于实现一些底层同步原语。
STATElong一个偏移量,用于表示在AbstractQueuedSynchronizer类中用于操作state变量的偏移量。
HEADlong一个偏移量,用于表示在AbstractQueuedSynchronizer类中用于操作head变量的偏移量。
TAILlong一个偏移量,用于表示在AbstractQueuedSynchronizer类中用于操作tail变量的偏移量。

这些成员变量在AbstractQueuedSynchronizer中用于维护等待队列、线程状态和同步状态等信息,从而实现了基于队列的线程同步和协调机制。不同的变量在整个机制中扮演着不同的角色,以实现正确的多线程同步行为。

方法public

我们来看一下AQS都提供了哪些方法

方法名参数含义方法作用
acquireint arg:请求获取锁的参数尝试获取锁,如果获取不到则将调用线程置于阻塞状态,直到锁可用或线程被中断。
acquireInterruptiblyint arg:请求获取锁的参数类似于acquire,但是允许线程在等待锁的过程中被中断。如果线程在等待时被中断,会抛出InterruptedException异常。
tryAcquireNanosint arg:请求获取锁的参数,long nanosTimeout:等待时间尝试获取锁,但最多等待指定的时间。如果在超时前未能获取锁,则返回结果指示是否成功获取。
releaseint arg:释放锁的参数释放锁,通常在获取锁成功后调用。释放锁会唤醒等待队列中的其他线程,使其有机会竞争锁。
acquireSharedint arg:请求获取共享锁的参数类似于acquire,但是用于共享锁的获取。多个线程可以同时获取共享锁,而不像独占锁一样只能有一个线程持有。
acquireSharedInterruptiblyint arg:请求获取共享锁的参数类似于acquireShared,但是允许线程在等待共享锁的过程中被中断。如果线程在等待时被中断,会抛出InterruptedException异常。
tryAcquireSharedNanosint arg:请求获取共享锁的参数,long nanosTimeout:等待时间类似于tryAcquireNanos,但是用于共享锁的获取。
releaseSharedint arg:释放共享锁的参数释放共享锁,通常在获取共享锁成功后调用。释放共享锁会唤醒等待队列中的其他线程,使其有机会竞争锁。
hasQueuedThreads-判断是否有线程在等待队列中等待获取锁。
hasContended-判断是否有线程在竞争锁。
getFirstQueuedThread-获取等待队列中的第一个线程,但不移除。
isQueuedThread thread:要检查的线程判断指定线程是否在等待队列中等待获取锁。
apparentlyFirstQueuedIsExclusive-判断等待队列中的第一个线程是否为独占模式(exclusive mode)线程。
hasQueuedPredecessors-判断调用线程是否有在等待队列中的前驱线程。如果有前驱线程,则可能需要执行阻塞操作。
getQueueLength-获取等待队列中的线程数。
getQueuedThreads-获取在等待队列中等待获取锁的所有线程。
getExclusiveQueuedThreads-获取在等待队列中等待获取独占锁的所有线程。
getSharedQueuedThreads-获取在等待队列中等待获取共享锁的所有线程。
toString-返回对象的字符串表示,通常包括等待队列中的线程信息。
ownsThread thread:要检查的线程判断指定线程是否是当前持有锁的线程。
hasWaiters-判断是否有线程在等待队列中等待释放锁。
getWaitQueueLength-获取等待队列中等待释放锁的线程数。
getWaitingThreadsCondition condition:相关的条件获取与指定条件相关的等待线程列表。

这些方法是AbstractQueuedSynchronizer类的核心方法,用于实现多线程同步和协调。

如果不使用AQS会怎样

AQS的应用

我们来直接举个例子

ReentrantLock

ReentrantLock中有3个内部类
在这里插入图片描述

Sync

AQS的子类,其实基本上实现了ReentrentLock的大部分方法,ReentrentLock开放出来的大部分方法其实都是直接调用的Sync里的方法

方法名参数含义方法作用
tryLocklong timeout, TimeUnit unit尝试获取锁,如果锁没有被其他线程持有,则获取锁并返回true,如果在指定的时间内无法获取锁,则返回false。
initialTryLock-作为tryLock的一种形式,是在ReentrantLock的构造函数中使用的,用于初始化锁。
lock-获取锁,如果锁已经被其他线程持有,则当前线程会被阻塞,直到获取到锁。
lockInterruptibly-获取锁,如果锁已经被其他线程持有,允许线程在等待时被中断。如果线程在等待时被中断,会抛出InterruptedException异常。
tryLockNanoslong timeout尝试在指定的时间内获取锁,如果锁没有被其他线程持有,则获取锁并返回true。如果在指定的时间内无法获取锁,则返回false。
tryRelease-尝试释放锁。
isHeldExclusively-判断当前线程是否持有独占锁。
newCondition-创建一个新的Condition对象,用于支持条件等待。
getOwner-获取当前持有独占锁的线程,如果没有线程持有锁,返回null。
getHoldCount-获取当前线程持有锁的次数,用于可重入锁的计数。
isLocked-判断锁是否被任何线程持有。

NonfairSync

Sync的子类,非公平锁的实现。

方法名参数作用
initialTryLockunused尝试获取锁,如果获取成功返回true,失败返回false。该方法只在构造方法中调用一次。
tryAcquireacquires独占式尝试获取同步状态。如果获取成功返回true,否则返回false。

FairSync

Sync的子类,公平锁的实现

方法名参数作用
initialTryLockunused尝试获取锁,当等待队列无线程等待并且state为0。不同于NonfairSync,公平锁只有无竞争时才会尝试获取锁。
tryAcquireacquires尝试获取同步状态,如果队列中第一个节点是当前线程就获取成功,不是则失败。

FairSync也继承自AQS,但实现了公平的锁获取语义 - 等待时间最长的线程最先获得锁。

这两个类开始起作用是在创建ReentrentLock的时候,这里
在这里插入图片描述

其他实现

  • CountDownLatch: 用来进行线程之间同步协作,可以实现一个线程等待其他线程完成某件事情之后再执行。
  • CyclicBarrier: 用来进行线程之间同步协作,可以实现让一组线程达到一个屏障时被阻塞,直到最后一个线程到达屏障时屏障才会开门,所有被屏障拦截的线程才会继续执行。
  • Semaphore: 用于控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。
  • Exchanger: 用于进行线程间的数据交换。它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。
  • BlockingQueue: 一个支持两个附加操作的队列。在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。
  • ForkJoinPool: Fork/Join框架中的线程池实现类,用于异步执行fork/join任务。
http://www.fp688.cn/news/141949.html

相关文章:

  • 网站后缀ga重庆seo代理计费
  • 写作网站的文风北京网站优化体验
  • 香港做电商网站seo资源咨询
  • 湛江免费网站建站模板网络营销方式与工具有哪些
  • 集团公司手机站网站漯河网站推广公司
  • b2c商城开发公司宁波seo教程
  • 广西建设培训中心网站关键词优化顾问
  • 做网站seoseo网站优化做什么
  • 杭州外贸网站建设公司价格佛山网站排名提升
  • 网站做飘浮怎么做郑州推广优化公司
  • 网站建设成都市专业搜索引擎seo服务
  • 网站建设方案及报价单seo优化服务是什么
  • 旅游网站代码html提高seo关键词排名
  • 无锡做网站首选众诺成都百度
  • 做网站的收钱不管了网站seo优化网站
  • 中小企业网站积木式搭建谷歌优化
  • 营销号是啥意思快速优化seo软件推广方法
  • 请人做网站要注意什么焊工培训心得体会
  • vs2010做网站今日热搜榜前十名
  • 温州网站制作企业百度品牌推广
  • 青岛的网站建设品牌营销策略案例
  • 做网站维护需要多少钱榆林百度seo
  • 大学生做的美食网站网站收录申请
  • 公司宣传手册内容模板企业网站排名优化方案
  • 深圳网站开发培训seo短视频网页入口引流网站
  • wordpress强制https大地seo
  • 多个网站如何做301新闻稿件代发平台
  • 网站建设合作合同模板下载广告营销策略
  • 上海网站建设的价格是多少钱学习软件
  • 深圳网站制作专业公司优化工具箱