02 2020 档案
摘要:LinkedBlockingQueue LinkedBlockingQueue是一个可以指定容量大小的以单链表为数据结构实现的队列,默认容量大小为 ,可以在构造方法中传入容量大小。 内部持有两个锁:读锁 ,控制元素的移除,对应条件 ,如果队列空,则阻塞线程; 写锁 ,控制元素的新增,对应条件 ,如果
阅读全文
摘要:ArrayBlockingQueue 是一个基于数组存储实现的有界阻塞队列,新增、获取、移除元素由内部持有的重入锁控制。 重入锁支持公平和非公平模式,默认使用非公平模式。 如果新增移除是阻塞的,那么新增时如果队列满了,会在 上等待,移除元素时如果队列空了,会在 上等待。 提供了读指针 和写指针 控制
阅读全文
摘要:ConcurrentHashMap 是`HashMap Hashtable 自旋+CAS ConcurrentHashMap`进行结构性修改时,只需要锁住修改元素所在的桶即可,其他不需要上锁同步,从而达到减小锁的粒度,资源竞争争抢降低,提供并发性能。 中键、值都不允许为null。 链表节点内部类 红
阅读全文
摘要:MySQL索引及执行计划 索引 合理的建立索引可以加快数据查询,例如,学校图书管为每一本书编号,根据编号可以快速锁定一本书所在位置。MySQL索引默认B+树索引。索引虽然能够提高检索效率,但同时也会降低更新的速度,因为 也会操作索引文件,会调整因为更新等操作带来的键值变化后的索引信息。 索引类型 主
阅读全文
摘要:CountDownLatch 基于AQS实现的同步器,允许一个或者多个线程通过 方法进入阻塞等待,直到一个或者多个线程执行 完成。 在创建时需要传入一个 值,一旦某个或者多个线程调用了 方法,那么需要等待 值减为0,才能继续执行。 方法每执行一次,count(state)值减1,直到减为0。一个线程
阅读全文
摘要:CyclicBarrier 栅栏,与 类似,但不是基于AQS实现的同步器,用于多个线程之间等待。 每次使用完之后可以重置, 不可重置, 同步一组线程, 同步两组线程(一组调用 方法阻塞等待,另一组调用 唤醒阻塞线程)。 接收一个 对象,当线程全部到达(调用 ),执行 。 内部类Generation
阅读全文
摘要:Semaphore 信号量,许可,用于控制在一段时间内,可并发访问执行的线程数量,基于AQS实现。 获取许可,支持公平和非公平模式,默认非公平模式。公平模式无论是否有许可,都会判断是否线程在排队,如果有线程排队,获取线程立即失败,进入排队;非公平模式无论许可是否充足,直接尝试获取许可。 可用于网关限
阅读全文
摘要:ReentrantLock 可重入排他锁,基于AQS同步框架实现锁机制。可重入锁支持公平和非公平模式,默认使用非公平模式。 内部通过 中的内部类 可以实现条件等待,调用 、`Condition signal`的线程需要先获取到锁,否则将会抛出异常。 AQS实现 java abstract stati
阅读全文
摘要:AbstractQueuedSynchronizer 同步器,是JDK同步工具的基础框架,实现核心为对 属性进行自旋、CAS原子更新,内部存在两个队列——同步队列、条件队列(·Condition·)。同步队列:所有尝试获取锁的线程会在该队列上进行排队,排队时线程通过 方法阻塞,通过 唤醒;条件队列:
阅读全文