java并发
形而下
一个走心的博主
展开
-
java并发---ConcurrentHashMap
为什么要使用ConcurrentHashMap线程不安全的HashMap在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。例如,执行以下代码会引起死循环。 final HashMap<String, String> map = new HashMap<String, Str...原创 2018-04-16 22:25:08 · 192 阅读 · 0 评论 -
java并发---volatile关键字
volatile的特性可见性:对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入原子性:对任意单个volatile变量的读/写具有原子性,但类似于volatile++这种复合操作不具有原子性volatile写-读建立的happens-before关系从内存语义的角度来说,volatile的写-读与锁的释放-获取有相同的内存效果:vola...原创 2018-04-16 22:26:50 · 265 阅读 · 0 评论 -
java并发---乐观锁与悲观锁
乐观锁与悲观锁 悲观锁乐观锁Synchronized synchronized实现原理 Java对象头monitor锁优化 自旋锁适应自旋锁锁消除锁粗化轻量级锁偏向锁重量级锁CAS CAS原理CAS缺点CAS与Synchronized的使用情景: 乐观锁与悲观锁 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据...原创 2018-04-16 22:32:16 · 346 阅读 · 0 评论 -
java并发---公平锁和非公平锁实现详解
Java中的公平锁和非公平锁实现详解转载 2018-04-16 22:33:38 · 634 阅读 · 0 评论 -
java并发---双重检查锁定与延迟初始化
双重检查锁定的由来例子1public class UnsafeLazyInitialization { private static Instance instance; public static Instance getInstance() { if (instance == null) // 1:A线程执行 ...原创 2018-04-16 22:35:38 · 220 阅读 · 0 评论 -
java并发---线程池
线程池的实现原理当向线程池提交一个任务之后,线程池是如何处理这个任务的呢?本节来看一下线程池的主要处理流程,处理流程图如图所示。 从图中可以看出,当提交一个新任务到线程池时,线程池的处理流程如下。线程池判断核心线程池里的线程是否都在执行任务。如果不是,则创建一个新的工作线程来执行任务。如果核心线程池里的线程都在执行任务,则进入下个流程。线程池判断工作队列是否已经满。如果工作队列没有满...原创 2018-04-16 22:37:41 · 161 阅读 · 0 评论 -
java并发---队列同步器(AbstractQueuedSynchronizer)
队列同步器AbstractQueuedSynchronizer(以下简称同步器),是用来构建锁或者其他同步组件的基础框架,它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作,并发包的作者(Doug Lea)期望它能够成为实现大部分同步需求的基础以下博客写的都很好,讲解也很详细:Java并发之AQS详解AQS实现分析...转载 2018-04-16 22:39:18 · 168 阅读 · 0 评论