AQS(三)条件队列(基于JDK8)

对于AQS(三)条件队列(基于JDK8)和宝马523CAS电脑的题,你了解多少呢?让小编带大家来了解一下吧!


文章目录


一、简介


11个节点


2等待


21添加条件服务员


22断开连接取消服务员


23全面释放


24正在同步队列


25检查挂起的中断


26等待报告中断


所有3个信号/信号


31do信号/do信号全部


32信号传输


4总结及使用


一、简介


引用



AQS有两个队列双向CLH队列同步队列和单向条件队列条件队列。


我们已经介绍过如何使用双向CLH队列来完成排他锁和共享锁。本文只介绍AQS中的条件队列。


这里的锁有三种响应locklock和lockunlock对应于同步,Wait对应于等待,signal/signalAll对应于通知/通知。


将等待/信令机制与等待/通知机制进行类比。


调用wait方法的线程必须首先进入一个同步代码块。这意味着您必须获取监视器锁。同样,调用wait方法的线程必须首先获取lock锁。


调用wait方法的线程释放其获取的监视器锁,并进入当前监视器锁的等待队列。同样,调用wait方法的线程释放获取到的锁,进入当前Condition对应的条件队列。


调用监视器锁的notify方法会唤醒等待监视器锁的线程。这些线程在获得锁后开始参与锁竞争并在wait方法中恢复执行。类似地,调用条件的signal方法会唤醒该条件队列中的线程,这些线程开始参与锁争用,并在获取锁后在wait方法中恢复执行。


11个节点


这里我们再次回忆一下之前的内容。


Node是AQS中的一个内部类,有五个状态,称为waitStatus,用于同步队列、内部线程thread以及nextWaiter中node的前一个和后一个指针。


Node用于构建同步队列节点,nextWaiter标识同步锁是独占还是共享,Node用于构建条件队列节点,nextWaiter指向单向链表中的下一个节点。


最重要的是五个状态CANCELLED、SIGNAL、CONDITION、PROPAGATE和0。


CANCELLED1表示当前节点已被取消。超时或者断电会触发该状态的改变,并且节点进入该状态后不会再发生改变。


SIGNAL-1表示后继节点正在等待当前节点唤醒。当后继节点加入队列时,前驱节点的状态将更新为SIGNAL。


CONDITION-2表示该节点正在等待Condition,当另一个线程调用Condition的signal方法时,处于CONDITION状态的节点从等待队列移动到同步队列,等待获取同步锁。


PROPAGATE-3在共享模式下,前驱节点不仅可以唤醒其后继节点,还可以唤醒后继节点的后继节点。


0这是新节点加入团队时的默认状态。


另外,WaitStatus>0表示已取消。


这里主要关注的是CANCELLED、CONDITION和0。


静态最终类Nodelt;ligt;使用保存的状态作为参数进行调用。如果失败,则会抛出IllegalMonitorStateException。lt;ligt;阻塞直到收到信号或中断lt;light;通过调用一个特殊版本来重新获取它,并将保存的状态作为参数lt;ligt;如果被中断,则在步骤4中阻塞时将抛出InterruptedExceptionlt;/olgt;/publicfinalvoidwaitthrowsInterruptedException//acquireQueued继续尝试获取。如果acquireQueuednode,saveStateInterruptMode!=THROW_IEInterruptMode=REINTERRUPT;ifnodenextWaiter!=null//取消时清理。//搜索,移除所有不属于CONDITION的节点unlinkCancelledWaiters;ifInterruptMode!=0//决定是引发异常还是生成自己的中断ReportInterruptAfterWaitinterruptMode;21添加条件服务员


创建一个新节点并将其放在条件队列的末尾。


/将新的等待者添加到等待队列中,并返回新的等待节点。/privatenodeaddConditionWaiter//为当前线程创建一个新节点,状态为CONDITION。节点node=newNodeThreadcurrentThread,NodeCONDITION;//下一个任务是放置节点。最后ift==nullfirstWaiter=node;否则tnextWaiter=节点;最后一个服务员=节点;返回节点;22unlinkCancelled服务员


/将取消的等待者节点从条件队列中断开。仅在持有锁时调用。当条件等待期间发生取消时以及在确定lastWaiter已被取消时插入新的等待者时调用。Signal所以可能需要完整的遍历,但只有在没有信号的情况下发生超时或取消时才起作用。它遍历所有节点,而不是在特定目的地停止以断开所有指向垃圾节点的指针,而不需要多次重新遍历。在取消泛洪期间///CONDITIONprivatevoidunlinkCancelledWaiters删除条件队列中除CancelledWaiters之外的所有节点。否则踪迹=t;t=下一个;23完整版


在排它锁中,状态>0表示线程已多次重新进入锁状态并同时释放。同步队列头后面的线程尝试获取锁。


释放失败表明当前线程不是getExclusiveOwnerThread记录的线程,抛出IllegalMonitorStateException异常。


释放调用tryRelease。以ReentrantLock为例,重写的tryRelease会检查当前线程是否是记录的线程,否则抛出异常。


/使用当前状态值调用release并返回保存的状态。取消节点并在失败时引发异常。参数节点此等待的条件节点返回先前的同步状态。///释放当前所有节点,重新进入主流甲醇快速检测范围。


本方法规定了白酒中甲醇的快速检测方法。


第一种方法适用于白酒中甲醇的快速检测,第二种方法适用于白酒中甲醇的快速检测。


方法1氯原酸方法2原理


样品中的甲醇在磷酸溶液中被高锰酸钾氧化成甲醛,过量的高锰酸钾用焦亚硫酸钠去除。甲醛在硫酸条件下与铬酸反应生成蓝紫色化合物。通过将样品与甲醇对照溶液进行比较来确定样品的甲醇含量。


3试剂与材料


除另有规定外,本方法所用试剂均为分析纯,水为GB/T6682规定的3级水。


31试剂311高锰酸钾。312磷酸。313亚硫酸氢盐偏差。314硫酸。315铬酸钠。316乙醇。3175乙醇取5mL乙醇,置于100mL容量瓶中,用水稀释至刻度线。318高锰酸钾/磷酸溶液称取30g高锰酸钾,溶于100mL磷酸水溶液中。319焦亚硫酸钠溶液称取100g焦亚硫酸钠,溶于100mL水。3110变色酸发色剂称取变色酸钠01g,溶于25mL水中,缓慢加入75mL硫酸,用玻璃棒不断搅拌,冷却至室温。32参考文献


甲醇对照品的中文名称、英文名称、CAS登记号、分子式和相对分子质量列于表1。纯度99。


表1汉字名称、英文名称、CAS登记号、分子式、甲醇相对分子量汉字名称英文名称CAS登记号分子式相对分子量


甲醇67-56-1CH3OH3204


33标准溶液的制备


甲醇标准溶液称取01g甲醇标准物质,加入100mL容量瓶中,用5%乙醇稀释至刻度线,混匀。


34种成分


甲醇快速检测试剂盒基质含有酒精,应保存在阴凉、干燥、避光的地方。


4仪器和设备41电子秤容量0001g。42个量筒50mL、100mL。43个移液器1mL、5mL。44酒精计


除非特别注明,本站所有文字均为原创文章,作者:admin

No Comment

留言

电子邮件地址不会被公开。 必填项已用*标注

感谢你的留言。。。