并发编程专题篇
文章平均质量分 88
总结了并发编程的核心知识。
Crazy Code Farmer
码农的世界
展开
-
并发编程之AQS
目录什么是AQS?AQS应用在哪里?为什么需要AQS?AQS作用(总述)AQS原理state状态state修改的问题FIFO队列获取/释放方法什么是AQS?AQS(AbstractQueuedSynchronizer)抽象队列同步器,具体是什么下面说。我们大多数的程序员都是业务开发者,而不是JDK开发者,所以平时并不需要自己来开AQS应用在哪里?找到AbstractQueuedSynchronizer类Ctr...原创 2021-05-04 20:51:49 · 155 阅读 · 1 评论 -
并发编程之CAS
概念:CAS的全称是Compare-And-Swap,它是CPU并发原语,它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的CAS并发原语体现在Java语言中就是sun.misc.Unsafe类的各个方法。调用UnSafe类中的CAS方法,JVM会帮我们实现出CAS汇编指令,这是一种完全依赖于硬件的功能,通过它实现了原子操作,再次强调,由于CAS是一种系统原语,原语属于操作系统用于范畴,是由若干条指令组成,用于完成某个功能的一个过程,并且原语的执行必须是连续的...原创 2021-05-04 18:05:45 · 150 阅读 · 3 评论 -
并发编程之线程池(阻塞队列,拒绝策略,线程池种类)
目录1.使用线程池比手动创建线程好在哪里?2.线程池各个参数的含义3.学习线程池参数从创建线程线程池创建(从一个小例子说起)4.线程池拒绝策略5.线程池常用阻塞队列ArrayBlockingQueue(基于数组的先进先出队列,有界)LinkedBlockingQueue(基于链表的先进先出队列,无界)SynchronousQueue(无缓冲的等待队列,无界)DelayedWorkQueue6.有哪6种常见的线程池?什么是java8的ForkJoinPoolFix.原创 2021-05-04 12:27:33 · 937 阅读 · 0 评论 -
并发编程之volatile (JMM内存可见性,不保证原子性,禁止指令重排)
目录1.可见性一.了解JMM可见性需先知道主内存与工作内存的关系二.Volatitle可见性2.不保证原子性3.禁止指令重排指令重排理解volatile禁止指令重排4.使用场景分析(单例模式双端检锁机制怎么也存在线程安全问题)可见性,原子性,顺序性是并发编程三要素。Volatitle能够实现可见性,不能保证原子性,禁止指令重排保证了顺序性,在并发编程种非常常见,面试中也是常客。面试官往往会说聊下对Volatitle理解,当你回答完第一个问题,接下来将是接连的炮轰。..原创 2021-04-28 10:39:28 · 221 阅读 · 0 评论 -
并发编程之线程的状态(线程的生命周期)
人从出生最终会死亡,线程也有自己的生命周期,在 Java 中线程的生命周期中一共有 6 种状态,换种说法也可说是4种状态,把(计数等待,等待,阻塞)可统称为阻塞状态。如下图和文字描述。目录1.New(新创建)2.Runnable(可运行)3.Blocked(阻塞)一. Bolocked被阻塞二.Waiting(等待)三.Timed Waiting(计时等待)4.Terminated(终止)如图:1.New(新创建) New 表示线程被创...原创 2021-04-27 20:26:02 · 165 阅读 · 0 评论 -
并发编程之线程安全的集合(Collections工具类,Concurrent并发包有很多线程安全的,来来都在这里,告别死记硬背)
先抛个砖头,那就问下ArrayList是线程安全的吗?大家肯定都知道不是线程安全的。我们平时在做有关多线程操作集合时使用ArrayList集合,会发现控制台提示:java.util.ConcurrentModificationException,分析它的内部源码, public void add(int index, E element) { rangeCheckForAdd(index); modCount++;//不是一个原子操作,高并发情况,会出现数据原创 2021-04-27 15:06:37 · 1074 阅读 · 0 评论 -
并发编程之锁(锁的种类,锁的升级,死锁)
并发编程知识体系中很有多知识都与锁有关,本文主要对锁种类概念阐释。后续博客中也会深入去研究锁的相关知识。1.锁的分类偏向锁/轻量锁/重量锁(锁的升级)第一种分类是偏向锁/轻量级锁/重量级锁,这三种锁特指 synchronized 锁的状态,通过在对象头中的 mark word 来表明锁的状态。偏向锁 如果自始至终,对于这把锁都不存在竞争,那么其实就没必要上锁,只需要打个标记就行了,这就是偏向锁的思想。一个对象被初始化后,还没有任何线程来获取它的锁时,那么它就是可偏向的,当有第一个线...转载 2021-04-26 14:16:30 · 195 阅读 · 0 评论