JUC
什么是JUC
juc是Java.util.concurrent
包的简写,也叫Java的并发包。
很多培训机构并不会去教这个JUC包,一般讲多线程之前,基本上最多讲到一个线程池的创建和使用。
那么这个JUC包是何方神圣呢?
JUC包有哪些
目录结构:
- java.util Java工具包
- concurrent Java并发包
- locks 锁
- atomic 原子类
- concurrent Java并发包
其中我们的java.utils.concurrent
下有我们的线程池,TimeUnit等。
java.utils.concurrent.locks
下有我们的锁以及抽象队列同步器,AQS和ReentrantLock等
java.utils.concurrent.atomic
下提供了一些支持原子操作的类,比如AtomicInteger
JUC的学习顺序
是不是有小伙伴听不懂上面分类呢,哈哈!JUC要学习的东西太多,一旦要讲就要讲个不同,因为学习过程中会有很多的知识点是有关系的,比如线程池涉及到AQS,CAS,ReentrantLock,synchronized。所以我们有一定的学习顺序。
-
CAS:并发的最基本操作了,这个贯穿整个并发包,使用简单,原理复杂。
-
synchronized:为什么要学习这个呢,我们的并发操作怎么可能少的了线程安全的保障呢,JUC中不是所有线程不安全的地方都是synchronized解决的,也有很多CAS操作
- 学习synchronized之前,你得对Java对象的对象头有一定的了解
- 同时你得知道一些基础的JVM指令,至少javap过几个简单的小demo
-
AQS:抽象队列同步器,看上去名字比较离谱,其实就是一个存储Thread一个双向链表,用起来复杂,实现起来也是细节拉满。
-
ReentrantLock:学习完AQS之后,你学习锁就简单多了。很快你就知道Lock的公平非公平,读写重入锁等各种概念了,(先学会怎么用,再去学习AQS,反过来再去理解Lock的原理)
-
至此你明白了Java锁的机制,接下来你可以学习线程池了!线程池使用起来比较简单,定制线程池的几个参数稍微用几次也能上手,但是底层用到了上述4点终点所有内容,如果你没有学过上述的内容,你就很难理解其源码了
-
明白了线程池,你反过来看concurrentHashMap的源码是不是轻松多了,轻松指的是至少可以看懂,源码阅读八可能轻松。
-
当你掌握以上内容,可以说JUC你是个行家了,接下来就是准备一些面试题方便加薪或者入职。有机会可以扒一扒Java的源码,读一读《深入了解Java虚拟机》对synchronized,voliate,native等更加深入的了解,来提升自己的水平。
学习链接提供
以哔哩哔哩的白嫖视频为主
-
CAS 这种博客看看就懂了
-
synchronized 这应该是B站讲的最深入透彻的synchronize底层原理了!,从对象头到jconsole,javap反编译,讲的很不错。
-
AQS Java并发编程中最难的AQS框架源码解析,去年12月的,还算热乎!
-
线程池:还没找到好的(免费的)
-
电子书可以去淘链接找,可以搜到很多,比如《深入了解Java虚拟机》。