摘要: 前言 线程池的作用就是将线程的管理、创建、销毁等操作与线程需要执行的任务隔离开来,从而避免线程频繁的创建与销毁,以及大量的线程的上下文切换造成的资源损耗。关于Java并发包中的线程池部分,我把它们分为两部分,即线程池和Fork/Join框架。 线程池 通常线程池的时候大家都是从工具类Executor 阅读全文
posted @ 2019-07-16 20:01 莫待樱开春来踏雪觅芳踪 阅读(481) 评论(0) 推荐(0) 编辑
摘要: 前言 这是Java并发包最后一个集合框架的数据结构,其复杂程度也较以往任何数据结构复杂的多,顾名思义ConcurrentHashMap是线程安全版本的HashMap,总所周知HashMap是非线程安全的,若直接用于多线程并发环境将会出现很多问题,比如数据丢失,甚至某些操作陷入死循环导致CPU利用率1 阅读全文
posted @ 2019-07-12 20:43 莫待樱开春来踏雪觅芳踪 阅读(1120) 评论(1) 推荐(0) 编辑
摘要: 引言 上一篇Java同步数据结构之Map概述及ConcurrentSkipListMap原理已经将ConcurrentSkipListMap的原理大致搞清楚了,它是一种有序的能够实现高效插入,删除,更新,搜索的基于链表结构的无锁线程安全Map,它是SkipList(跳表)的一种变体实现(其节点同时存 阅读全文
posted @ 2019-07-06 15:32 莫待樱开春来踏雪觅芳踪 阅读(551) 评论(0) 推荐(0) 编辑
摘要: 引言 前面介绍了CopyOnWriteArraySet,本来接着是打算介绍ConcurrentSkipListSet,无耐ConcurrentSkipListSet的内部实现其实是依赖一个ConcurrentSkipListMap实例实现的,所以必须先理解ConcurrentSkipListMap, 阅读全文
posted @ 2019-07-06 09:31 莫待樱开春来踏雪觅芳踪 阅读(1131) 评论(0) 推荐(0) 编辑
摘要: 前言 前面介绍完了队列(包括双端队列),今天探讨以下Java并发包中一个List的并发数据结构实现CopyOnWriteArrayList,顾名思义CopyOnWriteArrayList也是一种基于数组的类似ArrayList的集合,CopyOnWriteArrayList比起ArrayList最 阅读全文
posted @ 2019-07-01 21:42 莫待樱开春来踏雪觅芳踪 阅读(895) 评论(0) 推荐(0) 编辑
摘要: 前言 由于LinkedBlockingDeque作为双端队列的实现,采用了单锁的保守策略使其不利于多线程并发情况下的使用,故ConcurrentLinkedDeque应运而生,它是一种基于链表的无界的同时支持FIFO、LIFO的非阻塞并发双端队列,当许多线程共享对公共集合的访问时,Concurren 阅读全文
posted @ 2019-06-10 21:06 莫待樱开春来踏雪觅芳踪 阅读(2420) 评论(0) 推荐(0) 编辑
摘要: 前言 前面介绍完了队列Queue/BlockingQueue的实现类,接下来介绍双端队列Deque/BlockingDeque的实现类之一LinkedBlockingDeque,它是一种基于链表的可选容量的同时支持FIFO、LIFO的阻塞双端队列。 比起前面介绍的队列实现中的节点都有一个指向下一个节 阅读全文
posted @ 2019-06-04 19:48 莫待樱开春来踏雪觅芳踪 阅读(680) 评论(0) 推荐(0) 编辑
摘要: 前言 LinkedTransferQueue是Java并发包中最强大的基于链表的无界FIFO阻塞传输队列。从JDK7开始出现,Doug Lea说LinkedTransferQueue是ConcurrentLinkedQueue、SynchronousQueue (公平模式下)、无界的LinkedBl 阅读全文
posted @ 2019-05-31 19:32 莫待樱开春来踏雪觅芳踪 阅读(937) 评论(0) 推荐(0) 编辑
摘要: 前言 前面介绍的Queue都是通过Lock锁实现的阻塞队列,今天介绍一种非阻塞队列ConcurrentLinkedQueue,所谓非阻塞,其实就是通过CAS代替加锁来实现的高效的非阻塞队列。当许多线程共享对公共集合的访问时,ConcurrentLinkedQueue是一个合适的选择。与大多数其他并发 阅读全文
posted @ 2019-05-21 20:40 莫待樱开春来踏雪觅芳踪 阅读(760) 评论(0) 推荐(0) 编辑
摘要: 前言 严格来说SynchronousQueue并不是像它的名字那样是一种Queue,它更像是一个数据接力的交汇点,还记得在介绍Exchanger的时候提到过Exchanger可以看作是SynchronousQueue的双向形式吗,Exchanger是一种可以同时容纳多对线程进行两两交换数据的场所,所 阅读全文
posted @ 2019-02-25 16:58 莫待樱开春来踏雪觅芳踪 阅读(874) 评论(0) 推荐(0) 编辑