聊聊并发编程【Java并发专栏】
文章平均质量分 81
如果你想系统化了解Java并发编程,可以来学习
小诚信驿站
公众号《小诚信驿站》,网名:小诚信驿站。
任职:TechLead、服务端架构师
工作经历:创业公司、京东、腾讯、滴滴。
业务经验:互联网保险、第三方支付、大促营销提报和效果分析、电商商业化、客服策略模型工程。
活动区域:CSDN-小诚信驿站,腾讯云-小诚信驿站,InfoQ-小诚信驿站,GitHub-小诚信驿站,公众号-小诚信驿站。想要找到我的话,小诚信驿站或者wolf_love666一般就可以找到啦。个人微信:lxc354555
展开
-
AbstractQueueSychronizer-AQS框架实现原理和应用
文章目录一、背景二、收益三、名词介绍四、架构设计4.1、CLH锁![CLH锁](https://img-blog.csdnimg.cn/5759947557594eb8bdf701658e939652.png)4.2、CLH锁升级-AQS实现4.3、流程设计(举例ReentrantLock公平锁)五、模块设计5.1、state实现CAS锁5.2、独占/共享模式实现5.2.1、嵌套ConditionObject类,用作Condition实现5.2.2、独占锁实现5.2.3、共享锁实现5.3、自己基于AQS实现原创 2021-07-28 14:49:54 · 262 阅读 · 0 评论 -
并发编程(九)并发测试
一、静态代码分析工具的使用1.1、Checkstyle1.2、PMD1.3、FindBugs二、MultithreadedTC+Junit三、JConsole(监测应用状态)四、VisualVM(监测应用状态)原创 2021-04-07 08:06:09 · 195 阅读 · 1 评论 -
并发编程(四)锁
文章目录一、锁1.1、锁的定义1.2、锁的特性1.3、内置锁synchronized1.3.1、内置锁synchronized的可重入性1.3.2、内置锁重入性验证1.4、锁的种类:1.4.1、自旋锁1.4.2、公平锁与非公平锁实验原理1.4.3、ReentrantLock提供了公平和非公平锁的实现。1.4.4、读写锁(共享锁和独占锁)1.4.4.1、独占锁(悲观锁)1.4.4.2、共享锁1.4.4.3、乐观锁与悲观锁1.5、锁实现的方式:1.5.1、LockSupport工具类1.5.1.1、作用1.5.原创 2021-03-27 14:13:44 · 243 阅读 · 0 评论 -
并发编程 (三) 线程安全性之避免线程不安全
文章目录一、如何保证线程安全1.1、并发原子类1.2、加锁机制1.3、信号量同步共享数据1.4、封闭线程,不共享数据1.5、发布与逸出二、设计线程安全的类2.1、前提要素2.2、无限制的创建线程有哪些问题三、单例模式问题3.1、引申:单例模式看线程安全3.2、单例模式-懒汉式3.2.1、单线程可以,多线程环境下不安全(加锁)3.2.2、那么如何提高性能?(双重检测机制(DCL)懒汉式)3.2.3、那么如何提高性能?(锁范围缩小导致重排序问题)3.2.4、那么如何提高性能?(volatile 实现可见性)3.原创 2021-03-26 23:42:11 · 333 阅读 · 0 评论 -
并发编程 (二) 线程安全性之共享和可变
文章目录一、线程安全性的考察4维度(如何避免线程不安全)1.1、有状态和无状态二、多线程引发的问题来源2.1、Java内存模型2.2、硬件内存架构2.3、共享变量引申问题2.3.1、i++&++i的问题三、可见性问题3.1、Java内存模型中没有volatile修饰的变量可见性问题3.2、volatile关键字(JDK5以上)3.3、可见性的定义3.4、可见性问题的解决3.4.1、volatile是如何保证的3.4.2、上图中的线程1和线程2的原理四、指令重排序(JVM为了提升性能的一种机制)4.1原创 2021-03-26 22:49:18 · 267 阅读 · 0 评论 -
J.U.C-Atomic
前言:仿佛现在学习都特么为了面试了。。。。妹的!世风日下,不管网上如何瞎编,尽量高分答题,我不要求满分,只要求满分10分的时候,我拿9分!打卡2019-06-25日,目标8月底离职完毕!并发包下的原子类 1)布尔类型的AtomicBoolean 2)整型AtomicInteger、AtomicIntegerArray、AtomicIntegerFieldUpdater 3)长整型A...原创 2019-06-25 14:54:57 · 368 阅读 · 0 评论 -
J.U.C.lock之循环屏障CyclicBrrier源码解析和案例实现
目的:允许一组互相等待的线程,达到一个共同的障碍点。循环屏障可以实现一组固定的线程偶尔互相等待。这个屏障被叫做循环,因为在等待线程释放后它可以被重用。在这组所有线程到达屏障点完成任务释放线程之前,和最后一个线程到达后,线程循环屏障支持每一个屏障点执行一次线程命令。比喻:无论是一年级学生还是二年级学生,三年级学生。我设置好到了可以先签个到,可以等他们所有人到操场集合完毕,再开始做广播体操。而这...原创 2019-04-17 15:37:03 · 289 阅读 · 0 评论 -
J.U.C.并发容器
并发包中的并发List只有CopyOnWriteArrayList。实现原理:利用写时复制策略,在底层进行修改操作的时候都是通过复制的数组(快照)上进行。如何控制并发安全:上述类图中,每个CopyOnWriteArrayList对象里面有一个array数组对象用来存放具体元素,ReentrantLock独占锁对象用来保证同时只有一个线程对array修改。如何自己实现一个写时复...原创 2019-04-04 06:49:28 · 314 阅读 · 0 评论 -
并发编程(六)CAS原理+ABA问题的解决
乐观锁和悲观锁Synchronized属于悲观锁,悲观地认为程序中的并发情况严重,所以严防死守。CAS属于乐观锁,乐观地认为程序中的并发情况不那么严重,所以让线程不断去尝试更新。性能对比:Synchronized关键字会让没有得到锁资源的线程进入blocked状态,而后在争夺到锁资源后恢复为runnable状态,这个过程中涉及到操作系统用户模式和内核模式的转换,代价比较高。尽管Java1....原创 2019-02-19 11:13:01 · 510 阅读 · 0 评论 -
并发编程(五)锁优化+LongAdder+伪共享+缓存行+CAS+XADD
前提知识了解:1. 什么是伪共享CPU缓存系统中是以缓存行(cache line)为单位存储的。目前主流的CPU Cache的Cache Line大小都是64Bytes。在多线程情况下,如果需要修改“共享同一个缓存行的变量”,就会无意中影响彼此的性能,这就是伪共享(False Sharing)。2. 缓存行由于共享变量在CPU缓存中的存储是以缓存行为单位,一个缓存行可以存储多个变量(存满当...原创 2019-02-19 10:56:15 · 1223 阅读 · 0 评论 -
并发编程(总)知识点指南
线程安全概念:线程安全类认为是一个在并发环境和单线程环境中都不会被破坏的类。比如无状态的类的操作计算:既不包含任何域,也不包含任何对其他类中域的引用。计算过程中的临时状态仅存在于线程栈上的局部变量中,并且只能由正在执行的线程访问。无状态的对象一定是线程安全的。原子性与非原子性带来的问题原子性的操作就会涉及到原子可见性volatile,或者同步锁synchronized。多线程环境下...原创 2019-02-02 18:29:28 · 560 阅读 · 0 评论 -
并发编程(三)线程池篇
预告准备:一共分为三个部分。初级为了便于理解可以直接看第三部分,中级看所有,高级查缺补漏。一、Java中的多线程应用程序中有两种类型的线程 - 用户线程和守护程序线程。当我们启动一个应用程序时,main是第一个创建的用户线程,我们可以创建多个用户线程以及守护进程线程。执行所有用户线程后,JVM将终止该程序。我们可以为不同的线程设置不同的优先级,但它不保证优先级较高的线程将比低优先级线程首先执...原创 2018-12-12 18:02:05 · 1130 阅读 · 0 评论 -
并发编程(一)基础篇
基础概念: 进程:是一个正在执行中的程序。每一个进程执行都有一个执行顺序。该顺序是一个执行路径,或者叫一个控制单元。 线程:就是进程中的一个独立的控制单元。线程在控制着进程的执行。一个进程中至少有一个线程。 运行结果每一次都不同:因为多个线程都获取cpu的执行权,在某一个时刻,只能有一个程序在运行。(多核除外)cpu在做着快速的切换,达到好像同时运行的效果。 这就是多线程的一个特性:随机性。原创 2016-09-23 18:37:29 · 1675 阅读 · 0 评论