Java中基于AQS实现的自定义同步器示例,如何改写为长尾词?
- 内容介绍
- 文章标签
- 相关推荐
本文共计956个文字,预计阅读时间需要4分钟。
一、AQS 条件变量的支持在以下代码中,当另一个线程调用条件变量的 signal 方法时(必须先调用锁的 lock 方法获取锁),内部会将条件队列中头部的一个线程节点移到等待队列的头部。
javapublic void signal() { if (isHeldExclusively()) { Node first=firstWaiter; if (first !=null) doSignal(first); }}
private void doSignal(Node first) { do { if ( (firstWaiter=first.next)==null) lastWaiter=null; first.next=null; } while (!transferForSignal(first));}
一、AQS-条件变量的支持
在如下代码中,当另外一个线程调用条件变量的signal方法的时候(必须先调用锁的lock方法获取锁),在内部会把条件队列里面队头的一个线程节点从条件队列里面移除并且放入AQS的阻塞队列里面,然后激活这个线程。
本文共计956个文字,预计阅读时间需要4分钟。
一、AQS 条件变量的支持在以下代码中,当另一个线程调用条件变量的 signal 方法时(必须先调用锁的 lock 方法获取锁),内部会将条件队列中头部的一个线程节点移到等待队列的头部。
javapublic void signal() { if (isHeldExclusively()) { Node first=firstWaiter; if (first !=null) doSignal(first); }}
private void doSignal(Node first) { do { if ( (firstWaiter=first.next)==null) lastWaiter=null; first.next=null; } while (!transferForSignal(first));}
一、AQS-条件变量的支持
在如下代码中,当另外一个线程调用条件变量的signal方法的时候(必须先调用锁的lock方法获取锁),在内部会把条件队列里面队头的一个线程节点从条件队列里面移除并且放入AQS的阻塞队列里面,然后激活这个线程。

