JUC
文章平均质量分 92
两米以下皆凡人
这个作者很懒,什么都没留下…
展开
-
AQS相关工实现类的使用及其原理
文章目录1、AQS1.1、概述1.2、自定义不可重入锁2、ReentrantLock2.1、非公平锁2.1.1、加锁解锁流程2.1.1.1、加锁失败2.1.1.2、解锁竞争2.2、可重入原理2.3、可打断原理2.3.1、不可打断模式2.3.2、可打断模式2.4、公平锁2.5、条件变量ConditionObject2.5.1、await2.5.2、signal3、读写锁3.1、ReentrantReadWriteLock使用3.2、读写锁原理3.3、StampedLock4、Semaphore4.1、基本使用原创 2022-02-14 09:00:01 · 515 阅读 · 0 评论 -
ThreadPoolExecutor线程池应用及其原理
1、自定义线程池线程是一种系统资源,每创建一次,都会耗费一定的系统资源,如果是在高并发的场景下,每次任务都创建一个新的线程,那么这样对系统占用是相当大的,甚至会产生内存溢出的问题,而且线程存在的数量也不能太多,如果太多,频繁的上下文切换,也会有很大的负担,处于这两个原因,我们可以充分利用已有的线程,而不是每次创建新的线程#mermaid-svg-Ua0Ai7NnDXUlDBtg .label{font-family:'trebuchet ms', verdana, arial;font-family原创 2022-02-14 08:58:40 · 630 阅读 · 0 评论 -
不可变类的设计与应用
文章目录1、日期转换的问题2、不可变类的使用3、不可变类的设计1、日期转换的问题@Slf4jpublic class Test { @SneakyThrows public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); for (int i = 0; i < 10; i++) { ne原创 2022-02-13 20:05:21 · 494 阅读 · 0 评论 -
JUC之无锁并发(乐观锁)
文章目录1、引述2、CAS 与 volatile3、原子整数4、原子引用4.1、AtomicReference4.2、ABA问题4.3、AtomicStampedReference4.4、AtomicMarkableReference5、原子数组5.1、不安全的实现5.2、安全的实现6、字段更新器7、原子累加器7.1、累加器性能比较7.2、LongAdder源码7.2.1、CAS实现锁7.2.2、Cell7.2.3、自增源码跟踪7.2.4、sum8、Unsafe8.1、获取8.2、实现CAS8.3、实现原子原创 2022-02-13 20:02:26 · 438 阅读 · 0 评论 -
Java内存模型(JMM)
文章目录1、概述2、可见性2.1、退不出的循环2.2、原因分析2.3、解决办法2.4、可见性 VS 原子性3、有序性3.1、概述3.2、原理3.2.1、鱼罐头的故事3.2.2、指令重排优化3.2.3、支持流水线的处理器3.3、诡异的结果3.4、volatile原理3.4.1、保证可见性3.4.2、保证有序性3.4.3、双重检查加锁单例模式1、概述JMM 即 Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、CPU 指令优化等。JMM原创 2022-02-13 20:01:38 · 1032 阅读 · 0 评论 -
多线程设计模式集合
文章目录1、保护性暂停模式1.1、概述1.2、单任务版GuardedObject1.3、多任务版GuardedObject2、生产者消费者模式2.1、概述2.2、代码实现3、终止模式之两阶段终止4、同步模式之犹豫Balking5、双重检查加锁单例模式6、异步模式之工作线程6.1、定义6.2、饥饿6.3、创建多少线程池合适6.3.1、CPU 密集型运算6.3.2、I/O 密集型运算1、保护性暂停模式1.1、概述旨在用一个线程等待另一个线程的执行结果,因为要等待另一方的结果,因此归类到同步模式 有原创 2022-02-13 20:00:36 · 1728 阅读 · 1 评论 -
ReentrantLock使用及其原理
1、简介相对于 synchronized 它具备如下特点 可中断 可以设置超时时间 可以设置为公平锁(可解决饥饿问题) 支持多个条件变量,synchronized 如果没有获取到锁,统一放到 WaitSet 等待(等烟的,等外卖的,统一在一个休息室),而 ReentrantLock 可以包含多个 WaitSet ,分别保存不满足某条件的线程(等烟的和等外卖的分别各自有个休息室) 与 synchronized 一样,都支持可重入基本语法// 获取锁reentrantLock.lo原创 2022-02-13 19:54:38 · 960 阅读 · 1 评论 -
park unpark使用及其原理
文章目录1、基本使用2、对比wait & notify3、原理1、基本使用他们都是 LockSupport 工具类提供的方法,需要先 park 然后再 unpark// 暂停当前线程LockSupport.park(); // 恢复某个线程的运行LockSupport.unpark(暂停线程对象)@SneakyThrowspublic static void main(String[] args) { Thread t1 = new Thread(() -> {原创 2022-02-13 19:52:55 · 227 阅读 · 0 评论 -
wait notify使用及其原理
文章目录1、API介绍2、原理3、wait和sleep的区别4、正确使用姿势1、API介绍obj.wait() 让进入 object 监视器的线程到 waitSet 等待obj.wait(long timeout) 让进入 object 监视器的线程到 waitSet 等待,但是会有一个时限,不会无限制等待obj.notify() 在 object 上正在 waitSet 等待的线程中挑一个唤醒obj.notifyAll() 让 object 上正在 waitSet 等待的线程全部唤醒它们都原创 2022-02-13 19:51:48 · 202 阅读 · 0 评论 -
JUC之线程进程基础
文章目录1、进程和线程1.1、进程1.2、线程1.3、进程和线程之间的对比2、串行和并行2.1、概述2.2、串行并行之间的对比2.3、应用2.3.1、异步调用2.3.2、并行执行3、Java线程3.1、线程的创建3.1.1、Thread3.1.2、Runnable3.1.3、FutureTask3.1.4、Runnable和Thread之间的关系3.2、线程运行的原理3.3、线程上下文切换4、常用方法4.1、run和start4.2、getState4.3、sleep4.4、interrupt4.4.1、打原创 2022-02-13 19:42:30 · 245 阅读 · 0 评论 -
线程安全类之ConcurrentHashMap
文章目录1、概述2、ConcurrentHashMap2.1、简单应用2.2、JDK 7 HashMap 并发死链2.2.1、问题2.2.2、复现2.2.3、HashMap数据结构概述2.2.4、过程分析2.2.6、jdk8的改变2.3、JDK8 ConcurrentHashMap原理2.3.1、重要的属性和内部类2.3.2、重要的方法2.3.3、构造器2.3.4、get2.3.5、put2.3.6、Size计算流程2.4、JDK7 ConcurrentHashMap原理2.4.1、构造器2.4.2、put原创 2022-02-13 19:41:16 · 739 阅读 · 0 评论 -
Synchronized使用及其原理
文章目录1、线程安全问题1.1、问题分析1.2、概念归纳1.2.1、临界区1.2.2、竞态条件2、synchronized1.4、线程八锁问题3、变量的线程安全分析3.1、常见线程安全类3.2、不可变线程安全类3.3、案例分析3.4、卖票问题4、Monitor4.1、Java对象头4.2、Monitor 原理4.3、synchronized原理4.4、轻量级锁4.5、锁膨胀4.6、自旋优化4.7、偏向锁4.7.1、撤销偏向锁4.7.2、批量重偏向4.7.3、批量撤销5、死锁5.1、现象5.2、检测死锁5.3原创 2022-02-13 19:49:26 · 448 阅读 · 0 评论