AQS应用工具类源码学习yakax 发布于 2021-01-22 收录于 并发编程学习AQS的共享锁 CountDownLatch基本结构图1 基本就是当state值更改为0时就开始唤醒aqs队列第一个节点 然后,就会调用 setHeadAndPropagate 这个方法 唤醒持续唤醒后继节点
FutureTask源码学习yakax 发布于 2021-01-22 收录于 并发编程学习基本属性 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 /* Possible state transitions: * NEW -> COMPLETING -> NORMAL * NEW -> COMPLETING -> EXCEPTIONAL * NEW -> CANCELLED * NEW -> INTERRUPTING -> INTERRUPTED */ private volatile int state; //线程状态 private static final int NEW = 0; // 进来未执行的状态 private static final int COMPLETING = 1; // 表示正在结束,临时状态,用于结束前cas操作;异常和有结果前都会有 private static final int NORMAL = 2; // 正常结束 private static final int EXCEPTIONAL = 3; // 异常结束 private static final int CANCELLED = 4; // 任务被取消 private static final int INTERRUPTING = 5; // 中断中 也是临时状态 private static final int INTERRUPTED = 6; // 已中断 // 运行任务 private Callable<V> callable; // 整个任务周期中 存放值的对象,会有异常或者正常的值 private Object outcome; // 正在执行任务的线程 private volatile Thread runner; // get任务阻塞的线程 会存在这个队列里面 private volatile WaitNode waiters;
ReentrantLock + AQS源码学习yakax 发布于 2021-01-22 收录于 并发编程学习ReentrantLock 里面所使用到的基本结构持有锁的waitstatus 状态 来标识node线程状态
SynchronousQueue源码学习yakax 发布于 2021-01-22 收录于 并发编程学习SynchronousQueue 是实现了BlockingQueue的一个队列。特点是SynchronousQueue 没有容器。在生产者消费者情况下。生产者生产数据后没人消费是会阻塞的。当有消费者消费了,消费者与生产者同时退出队列。SynchronousQueue 的两种实现方式公平模式 就是队列 TransferQueue非公平模式 就是栈 TransferStack