并发编程
文章平均质量分 73
并发编程
asadsfasfasdfas
这个作者很懒,什么都没留下…
展开
-
09.ThreadLocal源码解析
ThreadLocal源码解析ThreadLocal存储结构Thread类有一个属性threadlocals类型是ThreadLocalMapThreadLocalMap内部维护了一个Entry类型的数组Entry类继继承了软引用,key是ThreadLocal类型并且是软引用,value是强引用可以把ThreadLocalMap理解为就是Map存储结构只不过实现不太一样比较让人别扭的是ThreadLocalMap是ThreadLocal的内部类但是ThreadLocal内部的Entry类的k原创 2021-08-22 11:09:27 · 279 阅读 · 0 评论 -
08.Semaphore源码解析
Semaphore源码解析目标通过Semaphore去学习AQS的共享模式,这章水了主要是觉得没啥可写的很多都写过了。方法解析1.acquire流程1.1:acquire方法 public void acquire() throws InterruptedException { sync.acquireSharedInterruptibly(1); }1.2:acquireSharedInterruptibly方法 public final void a原创 2021-08-18 15:27:36 · 135 阅读 · 0 评论 -
07.CyclicBarrier源码解析
CyclicBarrier源码解析属性说明与静态内部类/* * 表示代这个概念 */private static class Generation { // 表示当前代是否被打破,如果被打破,那么再来到这一代的线程,就会直接抛出BrokenBarrierException异常 // 且在这一代挂起的线程,都会被唤醒,然后抛出BrokenBarrierException boolean broken = false;}// 因为barrier的实现是依赖于Conditio原创 2021-08-17 18:41:48 · 141 阅读 · 0 评论 -
06.CountDownLatch源码解析
CountDownLatch源码解析目标通过CountDownLatch去学习AQS的共享模式CountDownLatch的属性// CountDownLatch的静态内部类的示例,该类继承于AQSprivate final Sync sync;方法解析1.await流程1.1:await方法 public void await() throws InterruptedException { sync.acquireSharedInterruptibly(1);原创 2021-08-16 12:12:12 · 90 阅读 · 0 评论 -
03.ThreadPoolExecutor源码分析
ThreadPoolExecutor源码分析看前须知本文章所有内容是老师源码特训班的内容有兴趣的可以了解一波:https://space.bilibili.com/457326371?from=search&seid=882812707426049189本章需要一些前置知识:FutureTask原理,线程池的基本使用上述前置知识很多都可以在老师的公开课中找到基于JDK8版本进行源码分析继承体系图线程池内部结构图线程池状态转换图重要属性以及常量说明/* * 表示两种含义原创 2021-08-03 21:40:52 · 180 阅读 · 0 评论 -
02.FutureTask源码分析
FutureTask源码看前须知本文章所有内容是老师源码特训班的内容有兴趣的可以了解一波:https://space.bilibili.com/457326371?from=search&seid=882812707426049189本章需要一些前置知识:线程池的基本使用,FutureTask的基本使用,CAS,Unsafe,volatile,线程中断上述前置知识很多都可以在老师的公开课中找到基于JDK8版本进行源码分析重要属性说明// 表示当前任务状态private volat原创 2021-08-03 13:11:59 · 407 阅读 · 1 评论 -
01.ConcurrentHashMap源码分析
ConcurrentHashMap源码分析(1)看前须知本文章所有内容是老师源码特训班的内容有兴趣的可以了解一波:https://space.bilibili.com/457326371?from=search&seid=882812707426049189本章需要一些前置知识:LongAdder原理,HashMap原理(知道最好),红黑树,LockSupport,volatile,CAS,Unsafe上述前置知识很多都可以在老师的公开课中找到基于JDK8版本进行源码分析JDK8与J原创 2021-07-23 13:03:59 · 424 阅读 · 3 评论 -
55.同步工具类
同步工具类什么是同步工具类同步工具类可以是任意一个对象,只要它可以根据自身的状态来协调线程的控制流。常用的同步工具类SemaphoreCountDownLatchCyclicBarrierSemaphore1.Semaphore介绍中文是信号量,用来限制能同时访问共享资源的线程上限。2.使用示例/** * @author 单国玉 * @date 2021/6/21 * @description 演示Semaphore的基本使用 */public class Semapho原创 2021-06-21 17:10:03 · 66 阅读 · 0 评论 -
51.线程池
线程池线程池类图线程池状态ThreadPoolExecutor 使用 int 的高 3 位来表示线程池状态,低 29 位表示线程数量,因为这些信息存储在一个原子变量 ctl 中,目的是将线程池状态与线程个数合二为一,这样就可以用一次 cas 原子操作进行赋值。// c 为旧值, ctlOf 返回结果为新值ctl.compareAndSet(c, ctlOf(targetState, workerCountOf(c))));// rs 为高 3 位代表线程池状态, wc 为低 29 位代表线原创 2021-06-17 21:13:57 · 158 阅读 · 1 评论 -
50.不可变类设计
不可变设计原创 2021-06-16 15:06:44 · 134 阅读 · 0 评论 -
08.ReentrantReadWriteLock源码解析
ReentrantReadWriteLock源码解析原创 2021-06-15 20:00:57 · 79 阅读 · 0 评论 -
05.ReentrantLock源码解析
ReentrantLock源码解析ReentrantLock类图加锁成功流程分析1.构造器分析public ReentrantLock() { //默认为非公平锁NonfairSync继承自Sync又继承自AQS。 sync = new NonfairSync();}2.lock()方法final void lock() { //使用CAS去修改state如果修改成功则说明获取到了锁则然后设置独占状态下这把锁的主人是当前线程。 if (compareAnd原创 2021-06-01 17:20:51 · 133 阅读 · 0 评论 -
08.并发容器
阻塞队列阻塞队列介绍在所有并发容器中,BlockingQueue是最常见的一种。BlockingQueue是一个带阻塞功能的队列,当入队列时,若队列已满,则阻塞调用者;当出队列时,若队列为空,则阻塞调用者。在Concurrent包中,BlockingQueue是一个接口,有许多个不同的实现类,如图所示:队列类型无界队列(unbounded queue)——几乎可以无限增长有限队列(bounded queue)——定义了最大容量队列数据结构队列实质就是一种存储数据的结构通常用链表原创 2021-05-31 22:04:21 · 67 阅读 · 1 评论 -
03.多线程基础回顾
多线程基础回顾Java中线程的创建与启动1.继承Thread类//创建某个类继承Thread类public class MyThread extends Thread { @Override public void run() { while(true){ System.out.println(Thread.currentThread().getName() + " 运行了") try { Thread.sleep(800); } catch (Interrupte原创 2021-05-31 16:23:37 · 98 阅读 · 2 评论 -
02.基本概念
基本概念进程程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内存。在指令运行过程中还需要用到磁盘,网络等设备。进程就是用来加载指令,管理内存,管理IO的。当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。进程可以视为程序的一个实例。大部分程序可以同时运行多个实例进程(例如记事本,画图,浏览器等),也有的程序只能启动一个实例进程(例如网易云音乐,360安全卫士等)。进程是OS(操作系统)资源分配的最小单位。线程1.线程的基本概念原创 2021-05-31 15:49:47 · 93 阅读 · 0 评论 -
07.Atomic与Unsafe
Atomic与Unsafe原子操作原子操作介绍原子(atom)本意是 不能被进一步分割的最小粒子 ,而原子操作(atomic operation) 意为 不可被中断的一个或一系列操作。相关术语术语名称英文解释缓存行Cache line缓存的最小操作单位比较并交换Compare and SwapCAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先 生变化,如果没有发生变化,才交换成新值,发生了变化则不交换CPU流水线CPU pip原创 2021-05-24 17:22:43 · 234 阅读 · 0 评论 -
04.AQS
AQS什么是JUCJava.util.concurrent 是在并发编程中比较常用的工具类,里面包含很多用来在并发场景中使用的组件。比如线程池,阻塞队列,计时器,同步器,并发集合等等。并发包的作者是大名鼎鼎的Doug Lea博士。AQS什么是AQSJUC当中的大多数同步器实现都是围绕着共同的基础行为,比如等待队列,条件队列,独占获取,共享获取等,而这个行为的抽象就是基于AbstractQueuedSynchronizer简称AQS,AQS定了一套多线程访问共享资源的同步器框架,是一个依赖状态(s原创 2021-05-21 17:35:19 · 173 阅读 · 0 评论 -
05.synchronized深入
synchronized设计同步器的意义多线程编程中,有可能会出现多个线程同时访问同一个共享、可变资源的情况,这个资源我们称之其为临界资源;这种资源可能是: 对象、变量、文件等。共享:资源可以由多个线程同时访问可变:资源可以在其生命周期内被修改引出的问题: 由于线程执行的过程是不可控的,所以需要采用同步机制来协同对对象可变状态的访问!如何解决线程并发安全问题实际上,所有的并发模式在解决线程安全问题时,采用的方案都是序列化访问临界资源。即在同一时刻,只能有一个线程访问临 界资源,也称作同步互原创 2021-05-19 19:13:41 · 1098 阅读 · 15 评论 -
04.JavaMemoryModel(JMM)
JMM为什么需要JMM通过上一章我们知道了内存屏障,缓存一致性,重排序这些问题都属于硬件级别的问题并且这些问题在不同的操作系统和硬件架构上都不一样,作为 Java 语言的特性,一次编写多处运行。我们不应该考虑平台相关的问题,并且这些所谓的内存屏障也不应该让程序员来关心。JMM体现在以下几个方面原子性-保证指令不会受到线程上下文切换的影响可见性-保证指令不会受到CPU缓存的影响有序性-保证指令不会受到CPU指令并行优化的影响什么是JMMJMM全称是 Java Memory Model 通过原创 2021-05-18 15:22:54 · 186 阅读 · 2 评论 -
01.并发编程之前的硬件知识梳理
并发编程之前的硬件知识梳理冯诺依曼计算机模型现代计算机模型是基于-冯诺依曼计算机模型1.介绍计算机在运行时,先从内存中取出第一条指令,通过控制器的译码,按指令的要求,从 存储器中取出数据进行指定的运算和逻辑操作等加工,然后再按地址把结果送到内存中去。 接下来,再取出第二条指令,在控制器的指挥下完成规定操作。依此进行下去。直至遇到停 止指令。程序与数据一样存贮,按程序编排的顺序,一步一步地取出指令,自动地完成指令规定 的操作是计算机最基本的工作模型。这一原理最初是由美籍匈牙利数学家冯.诺依曼于1原创 2021-05-17 15:28:50 · 337 阅读 · 0 评论