摘要:JUC源码分析 线程池篇(三)Timer Timer 是 java.util 包提供的一个定时任务调度器,在主线程之外起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次。 1. Timer 类结构 Timer 由 TimerThread,TaskQueue ,TimerTask 组
阅读全文
摘要:JUC源码分析 线程池篇(一):ThreadPoolExecutor Java 中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来 3 个好处。 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
阅读全文
摘要:JUC源码分析 集合篇:并发类容器介绍 同步类容器是 __线程安全__ 的,如 Vector、HashTable 等容器的同步功能都是由 等工厂方法去创建实现的,底层使用 synchronized 关键字,每次只有一个线程访问容器。这明显不满足高并发的需求。 __JDK1.8 中的并发类容器__ 非
阅读全文
摘要:JUC源码分析 集合篇(十)LinkedTransferQueue LinkedTransferQueue(LTQ) 相比 BlockingQueue 更进一步,生产者会一直阻塞直到所添加到队列的元素被某一个消费者所消费(不仅仅是添加到队列里就完事)。新添加的 transfer 方法用来实现这种约束
阅读全文
摘要:JUC源码分析 集合篇(九)SynchronousQueue SynchronousQueue 是一个同步阻塞队列,它的每个插入操作都要等待其他线程相应的移除操作,反之亦然。SynchronousQueue 像是生产者和消费者的会合通道,它比较适合“切换”或“传递”这种场景:一个线程必须同步等待另外
阅读全文
摘要:JUC源码分析 集合篇(八)DelayQueue __DelayQueue 是一个支持延时获取元素的无界阻塞队列。队列使用 PriorityQueue 来实现。__ 队列中的元素必须实现 Delayed 接口,在创建元素时可以指定多久才能从队列中获取当前元素。只有在延迟期满时才能从队列中提取元素。
阅读全文
摘要:JUC源码分析 集合篇(七)PriorityBlockingQueue __PriorityBlockingQueue 是带优先级的无界阻塞队列,每次出队都返回优先级最高的元素,是二叉树最小堆的实现。__ PriorityBlockingQueue 数据结构和 PriorityQueue 一致,而线
阅读全文
摘要:JUC源码分析 集合篇(六)LinkedBlockingQueue 1. 数据结构 LinkedBlockingQueue 和 ConcurrentLinkedQueue 一样都是由 head 节点和 last 节点组成,每个节点(Node)由节点元素(item)和指向下一个节点(next)的引用组
阅读全文
摘要:JUC源码分析 集合篇(四)CopyOnWriteArrayList Copy On Write 简称 COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容 Copy 出去形成一个新的内容然后再改,这是一种延时懒惰策略。
阅读全文
摘要:JUC源码分析 集合篇(三)ConcurrentLinkedQueue 在并发编程中,有时候需要使用线程安全的队列。如果要实现一个线程安全的队列有两种方式:一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现。
阅读全文
摘要:JUC源码分析 集合篇(一)ConcurrentHashMap 1. 概述 《HashMap 源码详细分析(JDK1.8)》: Java7 整个 ConcurrentHashMap 是一个 Segment 数组,Segment 通过继承 ReentrantLock 来进行加锁,所以每次需要加锁的操作
阅读全文