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