摘要:1. ArrayBlockingQueue简介 在多线程编程过程中,为了业务解耦和架构设计,经常会使用并发容器用于存储多线程间的共享数据,这样不仅可以保证线程安全,还可以简化各个线程操作。例如在“生产者-消费者”问题中,会使用阻塞队列(BlockingQueue)作为数据容器,关于BlockingQ 阅读全文
20.并发容器之ArrayBlockingQueue和LinkedBlockingQueue实现原理详解
2019-02-08 19:32 by xiaok1024, 590 阅读, 0 推荐, 收藏, 编辑21.线程池ThreadPoolExecutor实现原理
2019-02-08 19:32 by xiaok1024, 354 阅读, 0 推荐, 收藏, 编辑
摘要:1. 为什么要使用线程池 在实际使用中,线程是很占用系统资源的,如果对线程管理不善很容易导致系统问题。因此,在大多数并发框架中都会使用线程池来管理线程,使用线程池管理线程主要有如下好处: 降低资源消耗。通过复用已存在的线程和降低线程关闭的次数来尽可能降低系统性能损耗; 提升系统响应速度。通过复用线程 阅读全文
19.并发容器之BlockingQueue
2019-02-08 19:31 by xiaok1024, 153 阅读, 0 推荐, 收藏, 编辑
摘要:1. BlockingQueue简介 在实际编程中,会经常使用到JDK中Collection集合框架中的各种容器类如实现List,Map,Queue接口的容器类,但是这些容器类基本上不是线程安全的,除了使用Collections可以将其转换为线程安全的容器,Doug Lea大师为我们都准备了对应的线 阅读全文
17.并发容器之ThreadLocal
2019-02-08 19:30 by xiaok1024, 405 阅读, 0 推荐, 收藏, 编辑
摘要:1. ThreadLocal的简介 在多线程编程中通常解决线程安全的问题我们会利用synchronzed或者lock控制线程对临界区资源的同步顺序从而解决线程安全的问题,但是这种加锁的方式会让未获取到锁的线程进行阻塞等待,很显然这种方式的时间效率并不是很好。线程安全问题的核心在于多个线程会对同一个临 阅读全文
18.一篇文章,从源码深入详解ThreadLocal内存泄漏问题
2019-02-08 19:30 by xiaok1024, 544 阅读, 0 推荐, 收藏, 编辑
摘要:1. 造成内存泄漏的原因? threadLocal是为了解决对象不能被多线程共享访问的问题,通过threadLocal.set方法将对象实例保存在每个线程自己所拥有的threadLocalMap中,这样每个线程使用自己的对象实例,彼此不会影响达到隔离的作用,从而就解决了对象在被共享访问带来线程安全问 阅读全文
15.并发容器之ConcurrentLinkedQueue
2019-02-08 19:29 by xiaok1024, 396 阅读, 0 推荐, 收藏, 编辑
摘要:1.ConcurrentLinkedQueue简介 在单线程编程中我们会经常用到一些集合类,比如ArrayList,HashMap等,但是这些类都不是线程安全的类。在面试中也经常会有一些考点,比如ArrayList不是线程安全的,Vector是线程安全。而保障Vector线程安全的方式,是非常粗暴的 阅读全文
16.并发容器之CopyOnWriteArrayList
2019-02-08 19:29 by xiaok1024, 242 阅读, 0 推荐, 收藏, 编辑
摘要:1. CopyOnWriteArrayList的简介 java学习者都清楚ArrayList并不是线程安全的,在读线程在读取ArrayList的时候如果有写线程在写数据的时候,基于fast-fail机制,会抛出ConcurrentModificationException异常,也就是说ArrayLi 阅读全文
13.LockSupport工具
2019-02-08 19:28 by xiaok1024, 233 阅读, 0 推荐, 收藏, 编辑
摘要:1. LockSupport简介 在之前介绍AQS的底层实现,已经在介绍java中的Lock时,比如ReentrantLock,ReentReadWriteLocks,已经在介绍线程间等待/通知机制使用的Condition时都会调用LockSupport.park()方法和LockSupport.u 阅读全文
14.并发容器之ConcurrentHashMap(JDK 1.8版本)
2019-02-08 19:28 by xiaok1024, 321 阅读, 0 推荐, 收藏, 编辑
摘要:1.ConcurrentHashmap简介 在使用HashMap时在多线程情况下扩容会出现CPU接近100%的情况,因为hashmap并不是线程安全的,通常我们可以使用在java体系中古老的hashtable类,该类基本上所有的方法都采用synchronized进行线程安全的控制,可想而知,在高并发 阅读全文
11.深入理解读写锁ReentrantReadWriteLock
2019-02-08 19:27 by xiaok1024, 195 阅读, 0 推荐, 收藏, 编辑
摘要:protected final int tryAcquireShared(int unused) { /* * Walkthrough: * 1. If write lock held by another thread, fail. * 2. Otherwise, this thread is e 阅读全文