并发编程
并发
辣是真滴牛啤
这个作者很懒,什么都没留下…
展开
-
图解 ThreadLocal
ThreadLocal 以空间换时间来实现线程隔离,解决多线程中相同变量的访问冲突问题,保证了别的线程不会访问到线程内的变量。1.每一个线程对应一个ThreadLocalMap在使用 ThreadLocal 时(get/set 方法),会为当前线程 Thread 类中的threadLocals创建ThreadLocalMap对象。之后,如果当前线程使用 ThreadLocal 直接获取 Thread 类的threadLocals对象。源码可见:①ThreadLocal -> get() -&原创 2020-07-24 11:59:36 · 384 阅读 · 0 评论 -
Java并发编程实战(进阶篇 - 下)
紧接着上一篇我们继续分析在并发编程中所用到的一些并发工具。5.Fork/Join 框架5.1 什么是 Fork/Join 框架Fork/Join 框架是 Java7 提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。Fork :就是把一个大任务切分成若干子任务并行的执行;Join:就是合并这些子任务的执行结果。设计思路图:...原创 2020-03-05 00:15:08 · 312 阅读 · 0 评论 -
JUC Executor-ThreadPoolExecutor(线程池) 源码解析
通过Java并发编程实战(进阶篇 - 下)对 Executor 框架的简介,已经基本了解了 Executor 框架的结构和成员,本篇讲解 Executor 框架中任务执行单元 ThreadPoolExecutor(线程池)工作原理。前言提出三个问题来更好的了解 ThreadPoolExecutor:什么是线程池?线程池是指在初始化一个多线程应用程序过程中创建一个线程集合,然后在需要执行...原创 2020-03-04 18:55:18 · 369 阅读 · 1 评论 -
Java并发编程实战(进阶篇 - 上)
通过上一篇的学习我们就可以运用这些方法来构建线程安全的类,那么本篇我们会着重学习Java中的同步容器类、并发容器和框架、原子操作类、并发工具类、Executor 框架,看看这些并发类库或者框架是怎样实现的。一、同步容器类Java中同步容器类有2类:Vector、Stack、HashtableCollections 类中提供的静态工厂方法创建的类(由 Collections.synchro...原创 2020-03-05 00:14:21 · 270 阅读 · 0 评论 -
JUC Condition 源码分析
前言之前我已经分析了 AQS 的部分源码,那么在学习 Condition 原理之前,建议先去了解一下 AQS 的工作原理,可以参考:JUC AQS源码分析(上) – AQS原理分析JUC AQS源码分析(中) – ReentrantLock上锁源码解析一、Condition 概括Java并发编程实战(进阶篇)中分析 ArrayBlockingQueue 的阻塞入队和出队方法时使用到了 C...原创 2020-02-23 00:04:08 · 204 阅读 · 0 评论 -
阻塞队列(ArrayBlockingQueue) 迭代器源码分析
在看到 ArrayBlockingQueue 迭代器时感觉比之前看到的迭代器实现都要复杂,所有就专门提出来说一说。ArrayBlockingQueue 迭代器与 ConcurrentHashMap 迭代器类似都是一种“弱一致性”迭代器,在遍历数组时修改数组并不会抛出 ConcurrentModificationException 异常。为什么 ArrayBlockingQueue 迭代器复杂呢...原创 2020-02-22 00:56:36 · 844 阅读 · 2 评论 -
ConcurrentHashMap 源码分析(JDK1.8)
ConcurrentHashMap(JDK1.8)实现线程安全的思想也已经完全变了,它摒弃了Segment(锁段)的概念,而是启用了一种全新的方式实现,利用CAS算法。它沿用了与它同时期的HashMap版本的思想,底层依然由“数组”+链表+红黑树的方式思想。前言在学习 ConcurrentHashMap 源码之前你需要知道以下知识:HashMap 源码分析(JDK1.8)(由于 Conc...原创 2020-02-14 22:56:47 · 324 阅读 · 0 评论 -
ConcurrentHashMap遍历 --- 弱一致性的迭代器(Iterator)实现原理
在 Java并发编程实战(进阶篇) 中分析了 Vector 在迭代过程中对容器进行修改会抛出 ConcurrentModificationException 异常,但在并发容器中还会出现这种情况吗?在并发容器中并不会出现这种情况,这是因为,util包中的迭代器实现是fast-failed迭代器(就是一旦由修改就抛异常),而在current包中迭代器是弱一致性迭代器。那么我们通过 Concurr...原创 2020-02-08 19:34:42 · 2193 阅读 · 0 评论 -
Java并发编程实战(基础篇)
学习本文内容,默认已经了解Java多线程基础。本篇即为基础篇,那么主要讨论如何编写线程安全的代码,大概分为3个方向如何避免多线程同时访问同一时刻访问相同数据共享发布对象,从而使多线程同时安全访问根据现有线程安全组件构建线程安全的类在学习各模块只是之前,先普及一些知识。1.编写线程安全的代码核心?在访问共享、可变的状态要进行正确的管理。(可能现在还不太明白,看下去慢慢就懂了)2....原创 2020-03-05 00:14:49 · 538 阅读 · 0 评论 -
JUC AQS源码分析(中) -- ReentrantLock上锁源码解析
上篇主要讲解的AQS框架的基本原理以及设计思想,我们知道了AQS自定义同步组件大概需要三种技术:自旋、CAS、LockSupport.park();那么本篇我们着重分析一下并发大佬 Doug Lea 设计的ReentrantLock,它是如何在保证线程同步的情况下进行加锁的。这里贴一张ReentrantLock的类图Sync是ReentrantLock的内部抽象类,继承自AbstractQ...原创 2020-01-26 13:17:22 · 430 阅读 · 1 评论 -
JUC AQS源码分析(下) -- ReentrantLock解锁源码解析
上篇讲解了ReentrantLock的加锁过程,本篇我们接着讲解ReentrantLock解锁过程的源码。ReentrantLock解锁解析我们还是先写一个应用,从unlock() 方法一步一步进行底层源码分析。0.先写一个Demo public static void main(String[] args) { final ReentrantLock reentrantLock ...原创 2020-01-26 13:17:33 · 499 阅读 · 0 评论 -
JUC AQS源码分析(上) -- AQS原理分析
该系列博客主要分为上中下三篇分别介绍:AQS框架的原理、ReentrantLock上锁源码解析、ReentrantLock解锁源码解析一、介绍由于synchronize关键字在jdk1.6之前为重量级锁效率很低,每次对线程进行操作都需要涉及操作系统层面,于是并发大佬 Doug Lea 设计了JUC包,将线程同步操作提升到jdk级别,最差也是jvm级别。队列同步器 AbstractQueued...原创 2020-01-26 13:17:05 · 529 阅读 · 0 评论 -
Java设计模式之单例模式
转载原创 2019-03-25 20:30:26 · 472 阅读 · 0 评论 -
脏读、不可重复读 共享锁、悲观锁 和 事务五种隔离级别
转载转载 2019-10-28 17:45:19 · 90 阅读 · 0 评论