![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java并发编程学习之路
文章平均质量分 86
Java并发编程学习之路
PoetryAndTheDistance
三年Java后端,一年数据。一年交付。没别的爱好,只是喜欢啃骨头。
展开
-
十三:无锁并发框架-Disruptor
目录认识Disruptor核心设计原理数据结构概念与作用等待策略BlockingWaitStrategySleepingWaitStrategyYieldingWaitStrategyBusySpinWaitStrategyPhasedBackoffWaitStrategy写数据框架的使用生产消费模型的应用认识DisruptorDisruptor是一个开源框架,研发的初衷是为了解决高并发下列队锁的问题,最早由LMAX(一种新型零售金融交易平台)提出原创 2021-05-26 20:15:32 · 417 阅读 · 0 评论 -
十二:并发编程之Future&ForkJoin框架原理分析
目录任务性质类型CPU密集型(CPU-bound)IO密集型(I/O bound)CPU密集型 vs IO密集型一、什么是 Fork/Join 框架?二、工作窃取算法三、fork/join的使用四、fork/join框架原理常量介绍ForkJoinPool 中的相关常量和实例字段:ForkJoinPool 的内部状态都是通过一个64位的 long 型 变量ctl来存储,它由四个16位的子域组成:1、异常处理2、ForkJoinPool构造函数3、For原创 2021-05-25 21:42:28 · 254 阅读 · 0 评论 -
十一:并发编程之定时任务&定时线程池
目录ScheduledThreadPoolExecutorSchduledFutureTask工作线程的执行过程:SchduledFutureTask之run方法实现reExecutePeriodic方法线程池任务的提交任务提交方法:DelayedWorkQueue为什么要使用DelayedWorkQueue呢?DelayedWorkQueue属性offer方法任务排序sift方法take方法poll 方法finishPoll方法siftDow原创 2021-05-25 21:25:28 · 762 阅读 · 0 评论 -
十:并发编程之Executor线程池原理与源码解读
目录线程协程线程池线程池介绍线程的实现方式Runnable,Thread,CallableExecutor框架线程池重点属性ctl相关方法线程池的具体实现线程池的执行流程ThreadPoolExecutor线程池的创建任务提交参数解释线程池监控线程池原理源码分析execute方法addWorker方法Worker类runWorker方法getTask方法processWorkerExit方法线程线程是调度转载 2021-05-25 21:24:18 · 161 阅读 · 0 评论 -
泊松分布
一、泊松分布日常生活中,大量事件是有固定频率的。某医院平均每小时出生3个婴儿 某公司平均每10分钟接到1个电话 某超市平均每天销售4包xx牌奶粉 某网站平均每分钟有2次访问它们的特点就是,我们可以预估这些事件的总数,但是没法知道具体的发生时间。已知平均每小时出生3个婴儿,请问下一个小时,会出生几个?有可能一下子出生6个,也有可能一个都不出生。这是我们没法知道的。泊松分布就是描述某段时间内,事件具体的发生概率。上面就是泊松分布的公式。等号的左边,P 表示概率,N表示某种函数原创 2021-05-25 21:24:08 · 35535 阅读 · 1 评论 -
九:Collections之Map&List&Set详解
目录HashMap数据结构源码原理分析重要成员变量内部的执行机制源码Jdk7-扩容死锁分析单线程扩容多线程扩容Jdk8-扩容ConcurrentHashMap数据结构并发安全控制源码原理分析重要成员变量协助扩容helpTransfer扩容transfer总结CopyOnWrite机制源码原理并发编程脑图:https://www.processon.com/view/link/5d81dec7e4b04c14c4e7aac8H原创 2021-05-25 21:23:48 · 171 阅读 · 0 评论 -
Collections&Map&Set&List
HashMap1.7-hashtable = 数组(基础) + 链表(>=)1.8 = 数组 + 链表 + 红黑树HashMap->数组的大小new HashMap();如果不写构造参数,默认大小16如果说:写了初始容量:11 ?hashmap的容量就是11?hashmap的get,put操作时间复杂度O(1)key.hashCode = 不确定 - 有符号的整型值key.hashCode % 16 = table.lenth = [0-15] = index = 3;a.原创 2021-05-25 21:23:35 · 87 阅读 · 0 评论 -
八:并发编程之Atomic&Unsafe魔法类详解
目录原子操作1、相关术语2、处理器如何实现原子操作2.1 处理器自动保证基本内存操作的原子性2.2 使用总线锁保证原子性2.3 使用缓存锁保证原子性2.4Java当中如何实现原子操作Atomic1、原子更新基本类型类2、原子更新数组类3、原子更新引用类型4、原子更新字段类Unsafe应用解析如何获取Unsafe实例?Unsafe功能介绍1、内存操作2、CAS相关3、线程调度4、内存屏障并发编程脑图:https://www...转载 2021-05-24 21:52:45 · 149 阅读 · 0 评论 -
Dougli-Atomic原子包
Dougli->Atomic原子包1、全面走一遍Atomic包下面的原子类2、CAS->原子比较与交换算法的bug-ABA3、魔法类->Unsafe,jni->堆外内存1、atomic底层实现是基于无锁算法cas基于魔术类Unsafe提供的三大cas-api完成compareAndSwapObjectcompareAndSwapIntcompareAndSwapLong基于硬件原语-CMPXCHG实现原子操作casAtomicInteger分析 d.原创 2021-05-24 21:43:15 · 215 阅读 · 0 评论 -
七:并发编程之Tools&CountDownLatch&Semaphore原理与应用
目录1. Semaphore 是什么?2. 怎么使用 Semaphore?2.1 构造方法2.2 重要方法2.3 基本使用2.3.1 需求场景2.3.2 代码实现CountDownLatch使用及应用场景例子CountDownLatch是什么?CountDownLatch如何工作?CyclicBarrierExecutorsExchanger并发编程脑图:https://www.processon.com/view/link/5d81dec7e4b04转载 2021-05-24 21:35:13 · 170 阅读 · 1 评论 -
六:抽象队列同步器AQS应用之BlockingQueue详解
目录概要队列类型队列数据结构ArrayBlockingQueueLinkedBlockingQueueDelayQueueBlockingQueue API多线程生产者-消费者示例并发编程脑图:https://www.processon.com/view/link/5d81dec7e4b04c14c4e7aac8概要BlockingQueue,是java.util.concurrent包提供的用于解决并发生产者 - 消费者问题的最有用的类,它的特性是在任意时刻只.原创 2021-05-24 21:22:55 · 471 阅读 · 1 评论 -
五:抽象队列同步器AQS应用Lock详解
目录AQS应用之Lock并发之父ReentrantLockAQS具备特性AQS定义两种队列同步等待队列条件等待队列AQS源码分析并发编程脑图:https://www.processon.com/view/link/5d81dec7e4b04c14c4e7aac8AQS应用之Lock并发之父Doug Lea(小名:李二狗)生平不识Doug Lea,学懂并发也枉然Java并发编程核心在于java.util.concurrent包而juc当中的大多数同步转载 2021-05-24 21:05:49 · 248 阅读 · 0 评论 -
四:并发编程之synchronized详解
设计同步器的意义多线程编程中,有可能会出现多个线程同时访问同一个共享、可变资源的情况,这个资源我们称之其为临界资源;这种资源可能是:对象、变量、文件等。共享:资源可以由多个线程同时访问可变:资源可以在其生命周期内被修改引出的问题:由于线程执行的过程是不可控的,所以需要采用同步机制来协同对对象可变状态的访问!如何解决线程并发安全问题?实际上,所有的并发模式在解决线程安全问题时,采用的方案都是序列化访问临界资源。即在同一时刻,只能有一个线程访问临界资源,也称作同步互斥...转载 2021-05-24 00:00:57 · 201 阅读 · 0 评论 -
三:CPU缓存一致性协议MESI
目录CPU高速缓存(Cache Memory)CPU为何要有高速缓存带有高速缓存的CPU执行计算的流程目前流行的多级缓存结构多核CPU多级缓存一致性协议MESIMESI协议缓存状态MESI状态转换多核缓存协同操作单核读取双核读取修改数据同步数据缓存行伪共享MESI优化和他们引入的问题CPU切换状态阻塞解决-存储缓存(Store Bufferes)Store BufferesStore Bufferes的风险硬件内存模型CPU高速缓存转载 2021-05-23 23:40:32 · 200 阅读 · 0 评论 -
二:并发编程之JMM&synchronized&volatile详解
目录什么是JMM模型?JMM不同于JVM内存区域模型主内存工作内存Java内存模型与硬件内存架构的关系JMM存在的必要性数据同步八大原子操作同步规则分析并发编程的可见性,原子性与有序性问题原子性可见性有序性JMM如何解决原子性&可见性&有序性问题原子性问题可见性问题有序性问题as-if-serial语义happens-before 原则volatile内存语义volatile的可见性volatile无法保证原转载 2021-05-23 23:20:19 · 244 阅读 · 0 评论 -
一:操作系统底层工作的整体认识
目录冯诺依曼计算机模型详解计算机五大核心组成部分CPU指令结构控制单元运算单元存储单元CPU缓存结构CPU读取存储器数据过程CPU为何要有高速缓存带有高速缓存的CPU执行计算的流程CPU运行安全等级操作系统内存管理执行空间保护内核线程模型用户线程模型进程与线程虚拟机指令集架构栈指令集架构寄存器指令集架构冯诺依曼计算机模型详解现代计算机模型是基于-冯诺依曼计算机模型计算机在运行时,先从内存中取出第一条指令,通过控制器的译码转载 2021-05-23 22:57:17 · 166 阅读 · 0 评论