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