JUC并发编程
文章平均质量分 95
超级码里喵
这个作者很懒,什么都没留下…
展开
-
【JUC并发编程】CyclicBarrier、CountDownLatch、Semaphore的用法
目录1. CountDownLatch2. CountDownLatch与Join的区别3. Semaphore概念4. CyclicBarrier5. 总结1. CountDownLatchCountDownLatch是一种java.util.concurrent包下一个同步工具类,它允许一个或多个线程等待直到在其他线程中一组操作执行完成。 和join方法非常类似CountDownLatch底层是基于AQS实现的CountDownLatch countDownLatch=new CountDo原创 2022-05-09 11:31:26 · 271 阅读 · 1 评论 -
【JUC并发编程】AQS底层实现原理(源码解读/ 核心参数/ 公平锁/ 非公平锁/ 锁池/ 等待池)
目录1. AQS底层实现设计技术点2. AQS基本的概念3. AQS源码解读4. AQS核心参数5. AQS中为什么头结点是为空的6. 非公平锁实现原理7. 公平锁实现原理9. Condition9.1 锁池9.2 等待池1. AQS底层实现设计技术点CAS 用户态 保证原子性 —cpu硬件层面的支持 java语言调用cas双向链表(阻塞队列) 数组实现队列或者基于链表实现队列LockSupport2. AQS基本的概念aqs全称为AbstractQueuedSynchronizer原创 2022-05-09 11:10:43 · 1403 阅读 · 1 评论 -
【JUC并发编程】线程池底层原理(创建方式/ 核心参数/ SpringBoot整合/ 五种状态)
这里写目录标题什么是线程池为什么要使用线程池哪些地方会使用到线程池线程池有哪些作用线程池的创建方式线程池底层是如何实现复用的ThreadPoolExecutor核心参数什么是线程池线程池和数据库连接池非常类似,可以统一管理和维护线程,减少没有必要的开销。为什么要使用线程池因为频繁的开启线程或者停止线程,线程需要从新被 cpu 从就绪到运行状态调度,需要发生 cpu 的上下文切换,效率非常低。哪些地方会使用到线程池实际开发项目中 禁止自己 new 线程。必须使用线程池来维护和创建线程。项目原创 2022-05-09 10:43:32 · 492 阅读 · 0 评论 -
【JUC并发编程】BlockingQueue实现原理(BlockingQueue接口/ Java阻塞队列)
目录1. 简单回顾数据结构2. 数组结构3. 链表结构4. Lock锁使用回顾5. 什么是阻塞队列6. BlockingQueue接口7. 有界与无界区别8. Java里的阻塞队列8.1 ArrayBlockingQueue8.2 ArrayBlockingQueue8.3 ArrayBlockingQueue 实现生产者与消费者模型8.4 纯手写ArrayBlockingQueue8.5 LinkedBlockingQueue8.6 ArrayBlockingQueue 与LinkedBlockingQ原创 2022-05-07 15:11:21 · 791 阅读 · 1 评论 -
【JUC并发编程】Volatile关键字底层原理(下)(重排序效果/ 双重检验锁缺陷/ 单例模的7种写法/ 破解单例模式/ 缓存行)
目录1. 如何演示重排序效果1.1 Maven依赖模板1.2 相关测试例子1. 如何演示重排序效果使用jcstress并发压力测试1.1 Maven依赖模板<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xs原创 2022-05-07 01:07:59 · 418 阅读 · 0 评论 -
【JUC并发编程】Volatile关键字底层原理(中)(重排序/ 内存屏障/ happens-before)
目录1. 有序性(重排序)2. 什么是重排序3. 为什么需要重排序4. 重排序的例子分析1. 有序性(重排序)重排序并没有严格的定义。整体上可以分为两种:1.真·重排序:编译器、底层硬件(CPU等)出于“优化”的目的,按照某种规则将指令重新排序(尽管有时候看起来像乱序);2.伪·重排序:由于缓存同步顺序等问题,看起来指令被重排序了;重排序也是单核时代非常优秀的优化手段,有足够多的措施保证其在单核下的正确性。在多核时代,如果工作线程之间不共享数据或仅共享不可变数据,重排序也是性能优化的利器。然而,原创 2022-05-06 22:51:17 · 240 阅读 · 0 评论 -
【JUC并发编程】Volatile关键字底层原理(上)(Volatile的特性/ CPU多核硬件架构剖析/ JMM内存模型/ JMM八大同步规范/ Volatile的底层实现原理)
目录1. 什么是 Volatile2. Volatile的特性3. Volatile的用法4. CPU多核硬件架构剖析5. CPU的摩尔定律6. JMM内存模型6.1 主内存6.2 工作内存7. JMM八大同步规范1. 什么是 Volatilevolatile是Java提供的轻量级的同步机制,保证了可见性,不保证原子性 禁止重排序。Java 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量,相比于synchronized(synchronized通常称为重量级锁),volat原创 2022-05-06 16:52:20 · 931 阅读 · 0 评论 -
【JUC并发编程】Threadlocal底层原理分析(内存溢出OOM/ 内存泄漏/ 强、软、弱、虚引用实现区别)
目录1. Threadlocal基本API2. Threadlocal简单用法3. Threadlocal应用场景4. Threadlocal与Synchronized区别5. Threadlocal真实应用场景ThreadLocal提供了线程本地变量,它可以保证访问到的变量属于当前线程,每个线程都保存有一个变量副本,每个线程的变量都不同。ThreadLocal相当于提供了一种线程隔离,将变量与线程相绑定,Threadloca适用于在多线程的情况下,可以实现传递数据,实现线程隔离。1. Threadl原创 2022-05-06 09:52:11 · 407 阅读 · 0 评论 -
【JUC并发编程】synchronized原理分析(下)(ObjectMonitor 源码解读\ Hotspot源码解读\ synchronized底层实现原理总结\ 轻量锁、偏向锁、重量锁原理分析)
目录一、ObjectMonitor 源码解读1. 锁池2. 等待池3. wait与notify原理分析二、Hotspot源码解读1. synchronized底层实现原理总结2. 轻量锁原理分析3. 偏向锁原理分析3.1 偏向锁原理3.2 偏向锁撤销3.3 批量重偏向3.4 批量撤销4. 重量锁原理分析5. 锁粗化6. 锁消除7. JDK15 默认关闭偏向锁优化原因一、ObjectMonitor 源码解读Java底层使用 C++ hotspot虚拟机http://hg.openjdk.java.net原创 2022-05-05 15:04:09 · 1015 阅读 · 0 评论 -
【JUC并发编程】synchronized原理分析(中)(JVM对象头/ HotSpot源码分析/ 字节码文件分析)
目录一、JVM对象头1. Klass Pointer2. 实例属性3. 对齐填充4. 查看Java对象布局5. 基本数据类型占多少字节5. 论证压缩效果6. New 一个对象占用多少字节二、HotSpot源码分析1. 对象头详解2. 获取HashCode3. 对象状态3.1 偏向锁3.2 轻量锁3.3 重量锁三、字节码文件分析1.1 Monitor1.2 Monitorenter(获取锁)1.3 monitorexit1.4 ACC_SYNCHRONIZED一、JVM对象头在JVM中,对象在内存中的布原创 2022-05-05 12:32:42 · 660 阅读 · 1 评论 -
【JUC并发编程】synchronized原理分析(上)(偏向锁/轻量级锁/重量级锁/手写重入锁)
目录一、synchronized前置知识二、重入锁1. 演示重入锁2. 改造重入锁代码三、轻量级改造重量级锁一、synchronized前置知识偏向锁→轻量锁(cas自旋)→重量级锁重入锁概念/悲观锁与乐观锁基于CAS手写-重入锁基于CAS手写类似synchronized锁的升级过程补充概念:偏向锁: 同一个线程在没有其他线程竞争锁的情况下,可以一直复用我们的锁,不会重复获取锁。轻量锁: 多个线程同时获取锁,只有一个线程获取锁,没有获取到锁的线程会通过CAS不断重试(可以配置重试次数原创 2022-05-04 15:50:37 · 579 阅读 · 0 评论 -
【JUC并发编程】CAS原子类底层原理&&源码分析&&手写AtomicInteger&&手写Lock锁
一、什么是CASCAS: Compare and Swap,翻译成比较并交换。 执行函数CAS(V,E,N)CAS有3个操作数,内存值V,旧的预期值E,要修改的新值N。当且仅当预期值E和内存值V相同时,将内存值V修改为N,否则什么都不做。保证线程安全性的问题 原子性V: 全局共享变量 原子类中 value值 ===0E: 旧的预期值N: 修改的新值CAS:无锁----自旋控制乐观锁缺点:自旋 会消耗的cpu的资源 cas 死循环 空转问题 cpu飙高底层基于unsafe类实现Th原创 2022-05-04 09:18:38 · 370 阅读 · 0 评论