JAVA线程安全高并发
苏曼SUMAN
这个作者很懒,什么都没留下…
展开
-
1.线程解析
文章目录1. 线程组ThreadGroup1.1. 成员变量1.2. 主要函数2. 线程2.1. 线程定义2.2. 线程启动2.3. 线程优先级2.4. 线程状态2.5. Daemon 线程2.6. 中断线程2.7. 类解析2.7.1. 成员变量2.7.2. 主要函数2.7.3. 重点函数分析2.7.3.1. join2.7.3.2. sleep2.7.3.3. yield2.8. 线程间通知wa...原创 2019-12-30 20:07:28 · 222 阅读 · 0 评论 -
2.线程状态
文章目录1. 状态详解1.1. NEW1.2. RUNNABLE1.3. WAITING1.4. TIMED_WAITTING1.5. BLOCKED1.6. TERMINATED线程根据其生命周期分成一下几种状态NEW 新建线程刚创建RUNNABLE 可运行在JVM中正在运行的线程BLOCKED 阻塞线程处于阻塞状态,等待监视...原创 2019-12-30 20:08:30 · 147 阅读 · 1 评论 -
3.缓存一致性-指令重排-内存屏障
文章目录1. 缓存一致性2. 指令重排2.1. 重排的类型2.2. 数据依赖性2.3. as-if-serial 语义2.4. 程序顺序规则happens-before2.5. 指令重排对多线程的影响3. 内存屏障3.1. LoadLoad屏障3.2. StoreStore屏障3.3. LoadStore屏障3.4. StoreLoad屏障1. 缓存一致性为了保证内存可见性,Java 编译器在...原创 2019-12-30 20:09:35 · 553 阅读 · 2 评论 -
4.Java内存模型JMM
文章目录1. 线程通信2. 线程同步3. 内存模型3.1. 内存模型分类3.2. JMM 的内存可见性保证JMM 属于语言级的内存模型,它确保在不同的编译器和不同的处理器平台之上,通过禁止特定类型的编译器重排序和处理器重排序,为程序员提供一致的内存可见性保证.在并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间如何同步.1. 线程通信通信是指线程之间以何种机制来交换信息。在命令式...原创 2019-12-30 20:10:39 · 116 阅读 · 0 评论 -
5.volatile
文章目录1. 并发开发中的变量不可见问题1.1. 问题现象1.2. 问题产生的原因1.3. MESI MSI MOS Synapse Cache 一致性协议2. 使用 volatile 解决变量不可见问题3. volatile原理3.1. volatile 的特性3.2. volatile 的实现原则3.3. volatile在字节码中的实现3.4. volatile有序性的实现1. 并发开发中...原创 2019-12-30 20:11:44 · 142 阅读 · 0 评论 -
6.synchronized
文章目录1. 锁的升级1.1. 偏向锁1.2. 轻量级锁1.3. 重量级锁2. 锁与可见性(内存刷新)Java 中的每一个对象都可以作为锁。具体表现为以下3种形式。对于普通同步方法,锁是当前实例对象。对于静态同步方法,锁是当前类的 Class 对象。对于同步方法块,锁是 Synchonized 括号里配置的对象。1. 锁的升级1.1. 偏向锁偏向的意思是,偏向锁假定将来只有第一...原创 2019-12-30 20:12:25 · 120 阅读 · 0 评论 -
7.final
文章目录1. final的指令重排1.1. 赋值`final属性`的指令重排1.2. 读取`final属性`的指令重排1.3. `final属性`为引用类型1. final的指令重排对于 final 域,编译器和处理器要遵守两个重排序规则。在构造函数内对一个final变量赋值,与随后把这个被构造对象的引用赋值给一个变量,这两个操作之间不能重排序初次读一个包含final变量的对象,与随后初...原创 2019-12-30 20:13:14 · 199 阅读 · 1 评论 -
8.LockSupport
文章目录1. 简单示例2. 源码解读2.1. park2.2. unparkLockSupport主要用于对线程执行暂停(park)和唤醒(unpark)1. 简单示例public class LockSupportTest { static Thread t1,t2 = null; public static void main(String[] args) { ...原创 2019-12-30 20:13:52 · 129 阅读 · 0 评论 -
9.AQS
文章目录1. AQS中队列实现1.1. Node介绍1.2. 队列相关属性1.2.1. head节点1.2.2. tail尾节点1.3.方法1.3.1. 设置head compareAndSetHead(Node update)1.3.2. 设置tail compareAndSetTail(Node expect, Node update)1.3.3. 修改node的后驱节点 compareAnd...原创 2019-12-30 20:14:38 · 255 阅读 · 0 评论 -
11.Actomic原子类
文章目录1. 原子更新基本类型类2. 原子更新数组3. 原子更新引用类型4. 原子更新字段类1. 原子更新基本类型类AtomicBoolean:原子更新布尔类型AtomicInteger:原子更新整型AtomicLong:原子更新长整型常用方法如下:int addAndGet(int delta):以原子方式将输入的数值与实例中的值(AtomicInteger 里的 value)...原创 2019-12-30 20:15:55 · 1357 阅读 · 0 评论 -
12.线程池
文章目录1. 线程池复用线程的原理2. 线程池处理流程3. 线程池的使用3.1. 线程池的创建3.1.1. 可用任务队列3.1.2. 线程工厂3.1.3. 拒绝处理器3.1.4. 超时处理3.2. 向线程池提交任务3.3. 关闭线程池4. 线程池状态5. ScheduledThreadPoolExecutor5.1. 任务提交方法5.2. 提交任务6. Executors 工厂类的使用6.1 Th...原创 2019-12-30 20:16:28 · 282 阅读 · 1 评论 -
13.ThreadLocal
ThreadLocal类型的变量为线程本地变量,大概的原理就是建立了一个Map,然后key是线程,value是指,通过get方法就能取到每个线程自己的变量副本1. ThreadLocal使用2. ThreadLocal源码分析public class ThreadLocal<T> { // 设置属性 public void set(T value) { ...原创 2019-12-30 20:17:02 · 247 阅读 · 0 评论