JUC -- ASQ
2017-04-01 14:54:05 0 举报
JUC(Java Concurrency)是Java并发编程的一个框架,它提供了一系列的工具类和接口,用于实现多线程编程。ASQ(Automation Software Quality Institute)是一个全球性的自动化软件质量组织,致力于推动自动化测试的发展和应用。 在JUC中,我们可以使用各种锁、信号量、阻塞队列等工具来实现线程之间的同步和互斥。这些工具可以帮助我们更好地控制线程的执行顺序,避免出现数据竞争等问题。而ASQ则提供了一套完整的自动化测试体系,包括测试计划、测试设计、测试执行等方面的内容。通过使用ASQ提供的方法和工具,我们可以更加高效地进行软件测试,提高软件质量。
作者其他创作
大纲/内容
for循环开始:Node p = node.predecessor(); 获取 node 的prev指向的节点 p boolean failed = true; //初始化
没失败
NO
结束 void 返回然后 当前thread 就可以继续去做其他的事情了!
return interrupted;之后 acquireQueued () 方法执行完毕,返回interrupted
parkAndCheckInterrupt()(1)LockSupport.park(this);线程 !!!
我猜的:待验证!!!具体到代码逻辑: thread.阻塞, debug时候会发现 thread一直阻塞在这里不同,等到其他人release时候才notify 这个线程,然后继续走下去!!!!
ws 0?为取消状态吗?
YES
true 被中断过!
cancelAcquire(node)具体 TODO:
p == head&&//有资格去试试能不能获取到字段,可能会失败,会阻塞,被唤醒之后再试tryAcquire(arg) ==truep 是头结点 并且 当前线程获取 共享资源成功了!
NONO
回到那个for循环起点,继续循环啊!!!
解释
返回 true
setHead(node); p.next = null; // help GC failed = false; //表示成功! return interrupted; -----返回之前 还得走一下 finally中的代码!!
failed == true 失败了?
setHead(node):{head = node; node.thread = null; ??? node.prev = null; }
失败了
LockSupport.park(this); 这个 待验证哈 :thread阻塞在这一步, 需要靠别的人来唤醒它,唤醒之后 才能继续走下一步!!!执行parkAndCheckInterrupt 的 步骤二: (2) return Thread.interrupted(); //thread是否被中断过parkAndCheckInterrupt()方法返回结果:返回true : interrupted = true; 然后 回到起点 继续for循环返回false:否则 直接回到起点继续循环
返回false
Y
?????谁来唤醒呢?????怎么唤醒呢? LockSupport.unparK( )!!!什么时候唤醒呢???????release的时候???
selfInterrupt()TODO:
NO- - 大方向
先执行shouldParkAfterFailedAcquire()方法:(1)ws = pred.waitStatus获取前驱节点的状态
tryAcquire() 获取共享资源是否成功?
false 没有被中断过
NO--细节
ws0 表示prev的状态为取消状态。取消状态的节点都是无效节点,删掉!利用prev指针 往前走 把取消状态的node 都删掉,和正常状态的node 建立前后关系! do { node.prev = pred = pred.prev; } while (pred.waitStatus 0); pred.next = node;
acquire(int arg)方法开始:
interrupted true 还是 false?
YES YES YES
ws == Node.SIGNAL?表示前驱节点已经知道 他好了需要叫你了
Yes !!!
interrupted = true;
0 条评论
下一页