并发编程深入原理的文章
并发编程深入原理的文章系列,面试并发编程,看这些就够了。看完会对锁,同步等问题有深刻了解。
Airbander
团队精神,踏实肯干,学习能力强!
展开
-
并发编程----4、对象头详解
这一节非常重要,是整个并发锁的关键,因为重视提到无所、偏向锁、轻量锁、重量锁这些概念,很多人不知道这些东西是什么,为什么这样称呼,这一节好好看。目录一、概念二、用代码探究原理2.1、初探java对象头布局2.2、对象头详解一、概念对象头到底是什么东西呢?我们从hotspot的源码中贴上一段描述。// 32 bits:// --------// hash:25 ------------>| age:4 biased_lock原创 2020-06-22 10:04:10 · 353 阅读 · 0 评论 -
并发编程---9、锁
面试的时候,一般大型互联网或者数据公司都对并发很重视,但是为了保证线程安全,就需要锁来控制同一时刻一个线程访问资源。锁的知识也就是面试必问的知识了。这一章可能比较长,因为咱们着重介绍下各种锁。其实吧Synchronized和Volatile称作锁也没关系因为很多面试官都把他们也当成锁去提问。我们说的锁现在就只在jdk1.8的基础上面来说了。从代码层级来说。锁总体可以分为2类:1、Synchronized JVM内部实现(cpp)通过操作系统指令实现,属于内核态。2、Lock 在JUC包下面,基于原创 2020-06-25 21:52:07 · 317 阅读 · 1 评论 -
并发编程----8、CAS与AQS
目录一、并发编程之CAS1.1、什么是CAS1.3、CAS底层原理1.4、CAS原理分析1.5、CAS应用场景二、并发编程之AQS2.1、概念2.2、基本思想2.3、CLH同步队列三、AQS源码分析一、并发编程之CAS在介绍CAS的时候先说下悲观锁和乐观锁,要不面提到这2个概念,大家会觉得陌生。悲观锁:写多,读少。所以悲观乐观锁:读多,写少,有版本控制。这一章偏理论,因为CAS主要就是一个算法。1.1、什么是CASCAS (compa.原创 2020-06-25 21:00:30 · 311 阅读 · 1 评论 -
并发编程----7、单例模式
模式是脱离语言而存在的,设计模式中的单例模式在并发中非常重要,大家不要沉迷于语言和架构,需要从设计角度去思考问题。技术是最容易被替代的,只有形成了自己的方法论和产品思维才能走得更远。 ------ 写在开篇前单例模式怎么产生的呢?多线程操作对象是要操作不同对象还是操作同一个对象呢?如果要操作同一个对象的话,需要保证对象的唯一性。单例模式要解决的问题就是:实例化过程中只实例化一次。大致的方法就是: 1)提供一个实例化的过程,也就是new方法; 2)提供返回实例对...原创 2020-06-25 18:22:44 · 200 阅读 · 0 评论 -
并发编程----6、Volatile关键字
目录一、简介二、JMM与CPU三、Volatile的语句分析四、Volatile使用场景五、volatile与synchronized的区别一、简介synchronized是阻塞式同步,在线程竞争激烈的情况下会升级为重量级锁。而volatile就可以说是java虚拟机提供的最轻量级的同步机制。但它同时不容易被正确理解,也至于在并发编程中很多程序员遇到线程安全的问题就会使用synchronized。被volatile修饰的变量能够保证每个线程能够获取该变量的最新值,从而避.原创 2020-06-25 17:58:30 · 158 阅读 · 0 评论 -
并发编程----5、锁膨胀
锁膨胀就是所谓的 锁从 无锁-> 偏向锁 -> 轻量锁 -> 重量锁 的过程。锁膨胀没什么太多细节需要讲,主要说下上一讲中的一些疑问。再讲一下批量冲偏向和批量撤销的原理。目录一、前情回顾二、批量重偏向三、批量撤销一、前情回顾我们看下面代码package com.hubin.lock;import org.openjdk.jol.info.ClassLayout;import static java.lang.System.out;public cl.原创 2020-06-22 14:55:13 · 295 阅读 · 0 评论 -
并发编程---3、Synchronized原理分析
一、概念Synchronized是利用锁的机制来实现同步的。锁的机制有如下两种特性:1、互斥性:即在同一时间只允许一个线程持有某个对象锁,通过这种特性来实现多线程中的协调机制,这样在同一时间只有一个线程对需同步的代码块进行访问。互斥性我们也往往成为操作的原子性。2、可见性:必须确保锁在释放之前,对共享变量所做的修改对于随后获取锁的另一个线程是可见的(即在获取锁时应获取最新共享变量的值),否则另一个线程可能是在本地缓存的某个副本上继续操作从而引起不一致。二、用法2.1 同步方法sync原创 2020-06-21 19:39:08 · 234 阅读 · 0 评论 -
并发编程系列---2、线程和线程池
线程池在并发编程中使用很普遍,而且线程池的原理很比较容易懂,但是这个不管是面试还是工作中都还是很重要的。下面我们主要来具体讲一下线程池、线程这些知识,汇总下,大家看这一篇文章我认为就够用了。里面有各种面试会问的,看懂了,线程池这块就拿捏的死死的了。目录一、多线程二、线程池2.1、线程池目的2.2、线程池基本框架2.3、线程池状态2.4、线程池 excute 分析2.5、自定义线程池2.6、线程池核心线程数怎么设置三、线程间通信方式3.1、进程间通信方式3.2、原创 2020-06-21 19:07:02 · 217 阅读 · 0 评论 -
并发编程---1、JMM
目录一、基本概念二、JMM介绍2.1 JMM结构1、方法区:2、堆(Heap):3、虚拟机栈(Stack) :4、本地方法栈(Native Method Stack):5、程序计数器:2.2 对象定位方式2.3 JMM内存模型2.4 硬件内存架构与JMM三、并发编程一、基本概念当你看到java内存模型的时候千万不要跟JVM弄混了,JVM包括JMM,JVM是java虚拟机,这个范畴会更大些。我们这一章节主要介绍下Java的内存模型。首先介绍几个概念.原创 2020-06-21 17:49:44 · 378 阅读 · 0 评论