Java 并发
Java 并发
baburwang
让分享成就你我!
展开
-
01-synchronized的实现原理
synchronized的原理与应用简介实现原理同步代码块monitorentermonitorexit同步方法MonitorJava 对象头MarkWord锁优化自旋锁适应自旋锁锁消除锁粗化==锁升级==偏向锁轻量级锁锁如何保证可见性简介 在Java 中,我们经常使用 synchronized 来保证线程安全,其可以保证...原创 2019-12-08 15:07:58 · 181 阅读 · 0 评论 -
02-volatile的实现原理
volatile的实现原理1. 简介2. 内存模型相关概念2.1 操作系统语义2.2 Java 内存模型2.2.1 原子性2.2.2 可见性2.2.3 有序性3. volatile 原理4. 总结1. 简介 上一篇博客中,我们了解了synchronized是一个重量级的锁,虽然JVM对它做了很多优化,而下面介绍的volatile则是轻量级的synchronized。如果一个变量使用volatile,则它比使用synchro原创 2020-06-02 10:25:11 · 212 阅读 · 0 评论 -
03-J.U.C之AQS
AQS1. AQS 简介2. CLH 同步队列2.1 入队2.2 出队3. 同步状态的获取和释放3.1 独占式3.1.1 同步状态获取3.1.2 获取响应中断3.1.3 超时获取3.1.4 线程阻塞3.1.5 同步状态释放3.2 共享式3.2.1 获取同步状态3.2.2 释放同步状态1. AQS 简介 AQS(AbstractQueuedSynchronizer),即队列同步器。它是构建锁或者其他同步组件的基础原创 2020-06-02 11:41:19 · 443 阅读 · 0 评论 -
04-J.U.C之ReentrantLock
ReentrantLock1. 简介2. 获取锁2.1 非公平锁2.2 公平锁2.3 区别3. 释放锁4. ReentrantLock与synchronized的区别1. 简介 ReentrantLock,可重入锁,是一种递归无阻塞的同步机制。它可以等同于synchronized的使用,但是ReentrantLock提供了比synchronized更强大、灵活的锁机制,可以减少死锁发生的概率。 &n原创 2020-06-03 11:11:43 · 167 阅读 · 0 评论 -
05-J.U.C之ReentrantReadWriteLock
ReentrantReadWriteLock1. 简介2. 写锁2.1 写锁的获取2.2 写锁的释放3. 读锁3.1 读锁的获取3.2 读锁的释放3.3 HoldCounter4. 锁降级5. 示例1. 简介 重入锁ReentrantLock是排他锁,排他锁在同一时刻仅有一个线程可以进行访问,但是在大多数场景下,大部分时间都是提供读服务,而写服务占有的时间较少。然而读服务不存在数据竞争问题,如果一个线程在读时禁止其他线程读原创 2020-06-03 12:21:51 · 117 阅读 · 0 评论 -
06-J.U.C之Condition
Condition1. 简介2. Condition的图解3. Condition 的实现3.1 等待队列3.2 等待3.3 通知4. 总结5. Condition 的应用1. 简介 在没有Lock之前,我们使用synchronized来控制同步,配合Object的wait()、notify()系列方法可以实现等待/通知模式。在JavaSE 5后,Java提供了Lock接口,相对于Synchronized而言,Lock提供原创 2020-06-03 16:46:34 · 219 阅读 · 0 评论 -
07-J.U.C之CAS
CAS1. 简介2. CAS 分析3. CAS 缺陷1. 简介 CAS,Compare And Swap,即比较并交换。整个AQS同步组件、Atomic原子类操作等等都是以CAS实现的,甚至ConcurrentHashMap在1.8的版本中也调整为了CAS+Synchronized。可以说CAS是整个JUC的基石。2. CAS 分析 在原创 2020-06-03 17:09:20 · 229 阅读 · 0 评论 -
08-J.U.C之并发工具类:CyclicBarrier
CyclicBarrier1. 简介2. 实现分析2.1 构造方法2.2 await()3. 应用场景4. 应用示例1. 简介 CyclicBarrier,一个同步辅助类,在API中是这么介绍的:它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier很有用。因为该barrier在释放等待线程原创 2020-06-03 22:45:33 · 198 阅读 · 0 评论 -
09-J.U.C之并发工具类:CountDownLatch
CountDownLatch1. 简介2. 实现分析2.1 await()2.2 countDown()3. 总结4. 应用示例1. 简介 CountDownLatch与CyclicBarrier有点儿相似。 CyclicBarrier所描述的是“允许一组线程互相等待,直到到达某个公共屏障点,才会进行后续任务",而CountDownLatch所描述的是”在完成一组原创 2020-06-04 01:02:04 · 306 阅读 · 0 评论 -
11-J.U.C之并发工具类:Semphore
Semphore1. 简介2. 实现分析1. 简介 信号量Semaphore是一个控制访问多个共享资源的计数器,和CountDownLatch一样,其本质上是一个“共享锁”。 Semaphore,在API是这么介绍的: 一个计数信号量。从概念上讲,信号量维护原创 2020-06-04 09:41:52 · 279 阅读 · 0 评论 -
12-J.U.C之并发工具类:Exchanger
Exchanger1. 简介2. 应用示例3. 实现分析4. exchange(V x)4.1 slotExchange(Object item, boolean timed, long ns)4.2 arenaExchange(Object item, boolean timed, long ns)1. 简介 Exchanger是最简单的也是最复杂的,简单在于API非常简单,就一个构造方法和两个exchange()方法原创 2020-06-04 11:53:02 · 225 阅读 · 0 评论 -
13-J.U.C之ThreadLocal
ThreadLocal1. ThreadLoacal 是什么2. 使用示例3. ThreadLocal源码解析3.1 ThreadLocalMap3.1.1 set(ThreadLocal key, Object value)3.1.2 getEntry()3.2 ThreadLocal3.2.1 get()3.2.2 set(T value)3.2.3 initialValue()3.2.4 remove()4. ThreadLocal 为什么会内存泄漏1. ThreadLoacal 是什么&nbs原创 2020-06-04 12:31:13 · 511 阅读 · 0 评论 -
14-线程和线程池
线程和线程池1. 线程1.1 什么是线程&多线程1.2 线程实现的方式1.3 线程的生命周期&状态1.4 线程执行顺序1.5 Callable & Future1.6 总结2. 线程池2.1 线程池是什么2.2 线程池的好处2.3 线程池实现原理2.3.1 源码分析2.3.2 工作线程2.4 线程池的使用2.4.1 线程池的创建2.4.2 向线程池提交任务2.4.2.1 excute()2.4.2.2 submit()1. 线程1.1 什么是线程&多线程 &n原创 2020-06-04 20:29:31 · 526 阅读 · 0 评论 -
15-Executor框架
Executor框架1. 简介1.1 Executor框架的两级调度模型1.2 Executor框架的结构与成员1.2.1 Executor 框架的结构1.2.2 Executor 框架的成员2. ThreadPoolExecutor 详解2.1 SingleThreadExecutor 详解2.2 FixedThreadPool 详解2.3 CachedThreadPool 详解3. ScheduleThreadPoolExecutor 详解3.1 运行机制3.2 实现原理4. FutureTask 详解原创 2020-06-04 22:20:00 · 197 阅读 · 0 评论