05 2021 档案
摘要:ThreadLocal可以让一个对象是共享变量,统一设置初始值,但是每个线程对这个对象的修改都是互相独立的。
阅读全文
摘要:CountdownLatch用于等待事件,是一次性的;countDown 递减计数器,表示有一个事件已经发生;await 等待计数器达到0,表示所有需要等待的时间已经发生。
CyclicBarrier用于等待其他线程,可重复使用;线程到达栅栏位置将调用 await 方法,这个方法会阻塞直到所有线程都到达栅栏位置;还可以在构造函数中传入 RUNNABLE,最后到达栅栏的线程执行它
阅读全文
摘要:ReentrantLock实现了非公平锁和公平锁,默认使用非公平锁。非公平锁相对于公平锁的不同之处在于,非公平锁在lock过程中,会先进行一次CAS抢锁,抢锁失败才会去看state状态是否为0,为0的话再次CAS抢锁;而公平锁没有第一次的CAS抢锁,如果state为0还要再看CLH队列中是否有等待的线程,没有等待的线程才会CAS抢锁。
阅读全文
摘要:约定 CLH 队列,在 AQS 的实现中也被称为同步队列(SyncQueue) 源码 Node类 static final class Node { // 共享模式和独占模式的标记 static final Node SHARED = new Node(); static final Node EX
阅读全文
摘要:阻塞机制由 doAcquireShared 方法实现,唤醒机制由 doReleaseShared 方法实现
阅读全文
摘要:阻塞机制由 acquireQueued 方法实现,唤醒机制由 unparkSuccessor 方法实现
阅读全文