一.概述 1.1 什么是线程安全? 1.2 案例 1.3 线程安全解决办法: 二.synchronized 2.1 概述 2.2 同步代码块 2.3 同步方法 2.4 静态同步函数 2.5 总结 三.多线程死锁 3.1 什么是死锁 3.2 如何避免 四.Threadlocal 4.1 什么是Threadlocal 4.2 案例 4.3 ThreadLoca实现原理 4.4 内存泄漏问题 五.Java内存模型 5.1 主内存和工作内存 5.2 内存间交互操作 5.3 多线程有三大特性 1. 原子性…
锁的升级和对比 java1.6为了减少获得锁和释放锁带来的性能消耗,引入了"偏向锁"和"轻量级锁". 偏向锁 偏向锁为了解决大部分情况下只有一个线程持有锁的情况. 大概逻辑是:每次获得锁时,在锁的对象头信息中存储了当前线程的ID,下次获取锁的时候,不需首先使用CAS竞争锁,只需要去对象头里查看是否是当前线程的ID即可. ps:其实对象头中的线程ID应该时刻变化的,不知道细节是怎么处理的.暂时就了解到这一步.不再深入学习. 轻量级锁 轻量级锁使用自旋的CAS获取锁.…
JAVA内存模型 在多线程这一系列中,不去探究内存模型的底层 一.什么是内存模型,为什么需要它 在现代多核处理器中,每个处理器都有自己的缓存,定期的与主内存进行协调: 想要确保每个处理器在任意时刻知道其他处理器正在进行的工作,将需要很大的开销:且通常是没必要的 我们只有在需要跨线程共享数据时,才需要知道信息:而在JAVA中就是通过正确的同步来实现 1.重排序 如下:判断输出的值将十分困难 public class PossibleReordering { static int x = 0, y…
1. 并发编程的挑战 2. 并发编程需要解决的两大问题 3. 线程通信机制 4. 内存模型 5. volatile 6. synchronized 7. CAS 8. 锁的内存语义 9. DCL 双重检查锁定 10. final 11. txt java 内存模型(JMM) 并发编程的挑战 线程上下文切换 定义:CPU通过给每个线程分配CPU时间片来实现多线程机制,使得即使是单核处理器也支持多线程.CPU通过时间片分配算法来循环执行任务,任务从保存到再次加载的过程就是一次上下文切换 多线程不一定…
Java 并发 关键字volatile @author ixenos volatile只是保证了共享变量的可见性,不保证同步操作的原子性 同步块 和 volatile 关键字机制 synchronized  同步块大家都比较熟悉,通过 synchronized 关键字来实现,所有加上synchronized 和 块语句,在多线程访问的时候,同一时刻只能有一个线程能够用synchronized 修饰的方法 或者 代码块. volatile 用volatile修饰的变量,线程在每次刚使用变量的时候,…
Java并发关键字Volatile 详解 问题引出: 1.Volatile是什么? 2.Volatile有哪些特性? 3.Volatile每个特性的底层实现原理是什么? 相关内容补充: 缓存一致性协议:MESI ​ 由于计算机储存设备(硬盘等)的读写速度和CPU的计算速度有着几个数量级别的差距,为了不让CPU停下来等待读写,在CPU和存储设备之间加了高速缓存,每个CPU都有自己的高速缓存,而且他们共享同一个主内存区域,当他们都要同步到主内存时,如果每个CPU缓存里的数据都不一样,这时应该以哪个数…
运行时数据区是指对 JVM 运行过程中涉及到的内存根据功能.目的进行的划分,而内存模型可以理解为对内存进行存取操作的过程定义.总是有人望文生义的将前者描述为 "Java 内存模型",最近在阅读<深入理解 Java 虚拟机>之后对二者加深了部分理解,于是写一篇相关内容的学习总结. 运行时数据区 <Java 虚拟机规范>定义中,由 JVM 管理的内存区域分为以下几个运行时数据区域: flowchart LR subgraph 运行时数据区 subgraph 线程私有…
1. Lock接口 2. 队列同步器AQS 3. 重入锁 ReentrantLock 4. 读写锁 ReentrantReadWriteLock 5. LockSupport工具 6. Condition接口 7. CAS 8. synchronized 9. 锁的内存语义 10. txt 锁 Lock接口 锁是用来控制多个线程访问共享资源的方式.一般来说一个锁可以防止多个线程同时访问共享资源(但有些锁可以允许多个线程访问共享资源,如读写锁). 在Lock接口出现前,java使用synchron…
1. 线程简介 2. 启动和终止线程 3. 对象及变量的并发访问 4. 线程间通信 5. 线程池技术 6. Timer定时器 7. 单例模式 8. SimpleDateFormat 9. txt java并发基础线程 线程简介 什么是多线程? 操作系统调度的最小单元,可以使用 JMX (ThreadMXBean)来查看一个普通的Java程序包含哪些线程 可以使用 jstack 查看运行时的线程信息 为什么要使用多线程? 1. 更多的处理器核心 2. 更快的响应时间 特别是多业务操作更加快速 3.…
1.  java 并发机制的底层原理实现 1.1 volatile 1.2 synchronized 1.3 原子操作 2. java 内存模型(JMM) 3. java并发基础线程 4. java 锁 5. java 并发容器 6. java阻塞队列(7个) 7. java 并发工具(4个) 8. java 原子操作类Atomic(13个) 9. java并发框架(2个)   10. txt java 并发机制的底层原理实现 volatile 特性 volatile可见性:对一个volatil…