Java并发
文章平均质量分 84
积累
Nan,气冲天.
厚积薄发
展开
-
深入理解AQS
文章目录1. AQS1.1 AQS 是什么1.2 AQS 主要方法源码解析1.2.1 获取资源1.2.2 释放资源1.3 基于AQS 实现的锁1. AQS1.1 AQS 是什么AQS是 AbstractQueuedSynchronizer 的简称,即抽象队列同步器 。是用来构建锁或者其它同步器组件的重量级基础框架及整个JUC体系的基石, 通过内置的FIFO队列来完成资源获取线程的排队工作,并通过一个int类变量state表示持有锁的状态。数据结构它并不是直接储存线程,而是储存拥有线程的Node原创 2021-03-04 20:57:35 · 256 阅读 · 1 评论 -
Java Volatile关键字
文章目录1. Volatile1.1 基本概念1.2 volatile的内存语义1. Volatile1.1 基本概念内存可见性内存可见性,指的是线程之间的可见性,当一个线程修改了共享变量时,另一个线程可以读取到这个修改后的值。重排序为优化程序性能,对原有的指令执行顺序进行优化重新排序。重排序可能发生在多个阶段,比如编译重排序、CPU重排序。1.2 volatile的内存语义保证变量的内存可见性禁止volatile变量与普通变量重排序内存可见性public class Vo原创 2021-03-04 13:17:53 · 180 阅读 · 1 评论 -
Java ThreadLocal类
文章目录1. ThreadLocal1.1 ThreadLocal 是什么1.2 底层数据结构以及原理1.3 内存泄露问题1.4 应用场景1. ThreadLocal1.1 ThreadLocal 是什么通常情况下,我们创建的变量是可以被任何⼀个线程访问并修改的。如果想实现每⼀个线程都有⾃⼰的专属本地变量该如何解决呢? JDK 中提供的 ThreadLocal 类正是为了解决这样的问题。也就是说ThreadLocal 提供了线程间数据隔离的功能,只在同一个线程共享数据。1.2 底层数据结构以及原理原创 2021-03-04 13:15:59 · 125 阅读 · 1 评论 -
Java 原子操作类 Atomic
文章目录1 Atomic 类1.1 Atomic 是什么?1.2 具有原子性的原理1 Atomic 类1.1 Atomic 是什么?Java从JDK1.5 开始提供了java.util.concurrent.atomic包(以下简称Atomic包),这个包中的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式。Atomic包大致可以分为4类原子更新基本类型原子更新数组原子更新引用原子更新属性Atomic只能保证读写安全(读写会加锁),并不能保证线程安全。例如:如原创 2021-03-03 17:18:43 · 243 阅读 · 1 评论 -
由浅入深分析阻塞队列
文章目录1 阻塞队列1.1 常见的阻塞队列1.2 阻塞队列的原理1.3 使用场景1.4 手写 BlockingQueue1 阻塞队列1.1 常见的阻塞队列ArrayBolckingQueue由数组结构组成的有界阻塞队列。内部构造是数组,具有数组的特性。public ArrayBlockingQueue(int capacity) { this(capacity, false);}public ArrayBlockingQueue(int capacity, boolean fa原创 2021-03-02 16:41:39 · 127 阅读 · 0 评论 -
一文带你了解ReentrantLock
1 ReentrantLock文章目录1 ReentrantLock1.1 ReentrantLock 是什么?1.2 ReentrantLock 和 Synchronized区别1.1 ReentrantLock 是什么?ReentrantLock是⼀个非抽象类,它是Lock接⼝的JDK默认实现,实现了锁的基本功能。从名字上看,它是⼀个"可重⼊"锁,从源码上看,它内部有⼀个抽象类 Sync ,是继承了AQS,自己实现的⼀个同步器。同时,ReentrantLock内部有两个非抽象类 NonfairS原创 2021-03-02 13:22:58 · 152 阅读 · 0 评论 -
一文了解Synchronized关键字
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录1 Synchronized1.1 synchronized 关键字是什么?1.2 synchronized 原理1.3 synchronized JDK1.6 优化1.4 锁升级的过程1 Synchronized1.1 synchronized 关键字是什么?synchronized 关键字解决的是多个线程之间访问资源的同步性,synchronized 关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。原创 2021-03-01 21:29:57 · 259 阅读 · 0 评论 -
多线程的前置知识点
多线程的前置知识点文章目录多线程的前置知识点1 线程的几种状态2 三种线程初始化方法3 线程池3.1 为什么要使用线程池3.2 线程池原理3.3 五种常见的线程池1 线程的几种状态new 尚未启动的线程处于此状态 是指还没调用Thread实例的start()方法。Thread thread = new Thread(()->{});System.out.println(thread.getState()); // 输出 NEWrunnable 在Java虚拟机中执行的线程处于原创 2021-02-28 16:45:18 · 342 阅读 · 1 评论