疾风先生
这个作者很懒,什么都没留下…
展开
-
基于AQS原理实现的锁
1. AQS概念及其组件AQS基础概念及其作用AQS基础概念AQS: 即抽象队列同步器,AbstractQueuedSynchronizerAQS之shared mode: 即共享锁/读锁,用于线程读取加锁,不能进行写操作,可以读读共享AQS之exclusive mode: 即独占锁/排他锁/写锁,用于线程原子写操作时加锁,只能一个线程持有,其他线程处于等待状态AQS中不同m...原创 2020-02-04 23:25:43 · 1454 阅读 · 0 评论 -
并发编程面临的问题小结
1. 临界区与数据竞争(竞态条件)java代码// sahred.javaint num = 0; // 在多线程中对于共享资源存在数据竞争,竞态条件// mutil.javarun(){ num ++; // 临界区 }通过上述代码可知临界区: 在并发多线程中执行一系列对共享资源的修改操作的代码区域,在该区域下的操作的执行结果会对其他线程产生影响,称该代码区域为...原创 2020-01-27 13:12:25 · 4134 阅读 · 0 评论 -
Java内存模型之简要知识与规范梳理
1. JMM简要知识语义规范Java编程语言的语义允许编译器和微处理器执行优化,从而与不正确同步的代码进行交互来完成工作.线程内语义是单线程程序的语义,它允许根据线程内读操作看到的值来完全预测线程的行为;由于单线程内的实现是在其上下文执行的, 可以通过评估线程的实现从而确定执行中的线程t的操作是否合法.程序遵循线程内语义: 在线程隔离状态下,每个线程的操作必须由该线程的语义控制,但是...原创 2020-01-20 14:04:42 · 289 阅读 · 0 评论 -
并发编程之线程池原理
1. 线程池作用使用背景在并发大量异步任务处理程序中,每执行一个任务就需要创建一个线程,同时任务执行完毕之后需要将线程销毁.我们知道JVM创建线程的时候需要为其分配线程栈空间以及一些初始化操作,同时销毁的过程需要回收线程栈空间并由gc释放资源,期间都需要耗费一定的时间,因此一个任务的最终执行时间=创建线程newTime + 程序执行excuteTime + 线程销毁的gcTime,如果期...原创 2020-02-06 14:30:18 · 368 阅读 · 0 评论 -
关键字volatile的使用与原子性问题
1. volatile的使用java源代码public class VolatileUsedClass { private static int sharedVar = 10; public static void main(String[] args) throws Exception { Thread thread1 = new Thread(ne...原创 2020-01-22 15:19:52 · 369 阅读 · 0 评论 -
final线程安全与工作原理
1.final语义与使用final的语义编译器做的处理编译器可以跨同步屏障移动对final修饰的字段值进行读取和调用任意或未知的方法编译器对于final修饰的字段允许保留缓存其在寄存器中,而在必须重新加载非final字段的情况下,将通过使用缓存的方式保留着而不从主内存中加载数据并发线程下是安全的对于final修饰的字段在所有线程中是属于不可变(基本类型值不可变,引用类...原创 2020-01-26 21:45:21 · 1725 阅读 · 0 评论 -
Java内存模型之可见性分析
1. JMM模型描述给定程序以及一个检测程序是否合法的执行跟踪,JMM工作原理是检查执行跟踪中的每个读,并根据某些规则检查读观察到的写是否有效JMM中可能产生的行为表象为不论代码是如何实现程序行为,只要保证程序的所有结果执行和JMM预期的结果一致即可基于上述的第二点,对实现者执行的代码进行转换的实现就比较自由,可以实现操作的重排序甚至删除不必要的同步操作代码2. JMM之数据共享与竞争...原创 2020-01-19 21:43:02 · 314 阅读 · 0 评论 -
synchronized的工作原理(三)
1. synchronized的锁存储以及锁分类synchronized的存储位置: 对象MarkWorkJVM的ObjectHeader信息MarkWord: hashcode(哈希code) + age(分代年龄age) + biased_lock(偏向锁标志) + lock (锁标志)Class Metadata Address(类元信息地址)Array Length: ...原创 2020-01-15 11:20:05 · 384 阅读 · 0 评论 -
并发原子性技术之CAS机制
1. CAS机制CAS定义从wiki百科中,Compare-and-swap简称为“CAS”,是属于并发多线程中实现同步原子操作的指令,是依赖于硬件层次的原语发起的原子操作从程序代码理解上,CAS包含check then act的两个动作,这两个动作在处硬件的处理器上是具备原子性,也就是在操作系统底层上已经实现对CAS算法的原子性保证CAS 使用条件需要输入两个数值,一个是...原创 2020-01-28 21:18:57 · 441 阅读 · 0 评论 -
synchronized基于内存语义的工作原理(二)
基于工作原理一可知同步关键字底层是基于JVM操作监视器的同步指令原语monitorenter和monitorexit来实现,这次将会通过抽象的内存语义来说明侧面说明加锁和解锁的方式1. 工作内存与主内存定义主内存: 一般就是计算机操作系统上的物理内存,简言之,即使一般我们所说的计算机的内存含义工作内存: 基于JMM(Java内存模型)规范规定,线程使用的变量将会把主内存的数据变量复制...原创 2020-01-11 16:18:48 · 418 阅读 · 0 评论 -
volatile工作原理
在前文中已经讲解到volatile的使用以及原子性的问题,volatile修饰的变量可以实现线程对变量的写操作能够让其他线程“看到”当前最新的变量数据值,从内存语义上而言,相当于告诉线程读取当前变量要从主内存中读取,对此,现将继续前文的volatile继续深入原理分析.1. volatile作用与使用场景volatile规则与作用基于Happen-Before的原则,对volatile...原创 2020-01-23 16:14:31 · 450 阅读 · 0 评论 -
synchronized基于JVM规范的工作原理(一)
1. synchronized同步方法synchronized同步方法的字节码还原java声明的方法在jvm中的结构格式method_infomethod_info { u2 access_flags; u2 name_index; u2 descriptor_index...原创 2020-01-07 18:48:00 · 400 阅读 · 0 评论 -
CPU高速缓存与内存屏障
1. CPU缓存cpu高速缓存的由来在CPU的全部取指令周期中(程序计算),至少需要访问一次存储器(也就是我们所说物理内存上的数据)通常需要多次访问存储器的取操作数或者保存结果,CPU处理计算的速度明显受限于访问存储器的限制因此解决方案就是利用局部性原理,在CPU与物理内存之间提供一个容量小并且速度快的存储器,称为高速缓存高速缓存概述缓存是分“段”(line)的,一个段对...原创 2020-01-09 19:13:14 · 644 阅读 · 0 评论 -
并发原子性技术之加锁方式
1. 锁的分类2. 加锁原理3. 锁的优化手段4. java加锁技术原创 2020-02-03 12:15:25 · 1543 阅读 · 0 评论 -
并发编程之伪共享
1. CPU高速缓存与伪共享CPU缓存与一致性在CPU高速缓存与内存屏障的介绍中,CPU在对数据进行读取的时候遵循缓存一致性来解决高速缓存的数据不一致问题,现简述如下:CPU高速缓存包含L1-L3 Cache缓存,每个缓存Cache都是分段(line)存储的,也就是缓存段(Cache line)根据缓存的一致性,多核CPU处理器情况下,当其中一个CPU对其所在的Cache进行写操作并...原创 2020-01-29 18:40:54 · 477 阅读 · 0 评论