Java JUC包的学习文章整理以及整体结构功能概述

基于JDK1.8详细介绍了JUC包的整体结构与功能,以及JUC各个部分的详细相关学习文章!

1 JUC包的整体结构与功能概述

在JDK1.5之前,Java中拥有的与线程和同步相关的组件有:

  1. 描述线程的类Thread,代表线程任务的接口Runable;内置条件队列操作接口Object.wait()/notify()/notifyAll(),它们都位于java.lang包;
  2. 提供volatile关键字,用来保证单操作变量的内存可见性;提供synchronized关键字作为内置锁,用来保证线程同步
  3. 提供简单且效率低下的并发容器,比如Hashtable、Vector等,位于Java.util包。

可以看到,此时的Java对于并发编程的支持还是很简陋和原始的,比如想要开多条线程只能手动new多个Thread对象。JDK1.5的时候增加了许多线程和同步有关的特性,大大提高了使用Java进行并发编程的效率:

  1. 加强了volatile关键字的语义,JDK1.5开始volatile关键字能够防止编译器对被声明volatile的变量进行重排序,即在volatile变量访问前的代码不可以排到访问后;访问后的代码不可以排序到访问前。从而可以真正的用来实现安全的双重检测锁(JDK1.5之前的双重检测锁都是不安全的,因为volatile关键字不具有禁止重排序语义)。
  2. 增加了java.util.concurrent包,又称并发包、JUC。JUC中包含了大量在java并发编程中非常有用的工具类,包括五个部分:
    1. locks部分:在java.util.concurrent.locks包中,提供更加强大的显式锁,比如 重入锁ReentrantLock、读写锁ReadWriteLock;
    2. collections部分:在java.util.concurrent包中,提供一系列高性能的并发容器,比如ConcurrentHashMap、CopyOnWriteArrayList等;
    3. atomic部分:在java.util.concurrent.atomic包中,提供原子变量类相关的功能,是构建非阻塞算法CAS的基础,比如AtomicInteger;
    4. executor部分:在java.util.concurrent包中,提供线程池相关的功能,用于批量创建、管理线程,比如ThreadPoolExecutor等,以及对线程任务的加强,比如Callable等
    5. tools部分:在java.util.concurrent包中,提供简单高效的同步工具类,如信号量Semaphore、闭锁CountDownLatch、栅栏CyclicBarrier等;

2 学习文章

JUC的学习,主要是学习它的源码,设计思想、实现原理、设计模式!

2.1 locks部分

2.1.1 AQS

AQS(AbstractQueuedSynchronizer)源码深度解析(1)—AQS的设计与总体结构

AQS(AbstractQueuedSynchronizer)源码深度解析(2)—Lock接口以及自定义锁的实现

AQS(AbstractQueuedSynchronizer)源码深度解析(3)—同步队列以及独占式获取锁、释放锁的原理【一万字】

AQS(AbstractQueuedSynchronizer)源码深度解析(4)—共享式获取锁、释放锁的原理【一万字】

AQS(AbstractQueuedSynchronizer)源码深度解析(5)—条件队列的等待、通知的实现以及AQS的总结【一万字】

2.1.2 ReentrantLock

JUC—ReentrantLock源码深度解析

2.1.3 ReadWriteLock

JUC—ReadWriteLock源码深度解析与应用

2.1.4 LockSupport

JUC—LockSupport以及park、unpark方法底层源码深度解析

2.2 collections部分

2.2.1 并发集合

2.2.1.1 ConcurrentHashMap

JUC—三万字的ConcurrentHashMap源码深度解析

2.2.1.2 ConcurrentLinkedQueue

JUC—ConcurrentLinkedQueue源码深度解析

2.2.1.3 CopyOnWriteArrayList

JUC—CopyOnWriteArrayList源码深度解析

2.2.1.4 CopyOnWriteArraySet

JUC—CopyOnWriteArraySet源码深度解析

2.2.1.5 ConcurrentSkipListMap

JUC—三万字的ConcurrentSkipListMap跳跃表源码深度解析

2.2.1.6 ConcurrentSkipListSet

JUC—ConcurrentSkipListSet源码深度解析

2.2.2 并发队列

2.2.2.1 ArrayBlockingQueue

JUC—ArrayBlockingQueue源码深度解析

2.2.2.2 LinkedBlockingQueue

JUC—LinkedBlockingQueue源码深度解析

2.2.2.3 PriorityBlockingQueue

JUC—两万字的PriorityBlockingQueue源码深度解析

2.2.2.4 SynchronousQueue

JUC—三万字的SynchronousQueue源码深度解析

2.2.2.5 DelayQueue

JUC—DelayQueue源码深度解析

2.2.2.6 LinkedTransferQueue

JUC—三万字的LinkedTransferQueue源码深度解析

2.2.2.7 LinkedBlockingDeque

JUC—LinkedBlockingDeque源码深度解析

2.3 atomic部分

2.3.1 atomic

JUC—两万字的atomic原子类源码深度解析

2.3.2 Unsafe

JUC—Unsafe类的原理详解与使用案例

2.4 executor部分

2.4.1 executor

JUC—六万字的Executor线程池框架源码深度解析

2.5 tools部分

2.5.1 CountDownLatch

JUC—CountDownLatch闭锁源码深度解析

2.5.2 CyclicBarrier

JUC—CyclicBarrier循环屏障源码深度解析

2.5.3 Semaphore

JUC—Semaphore信号量源码深度解析

2.5.4 ThreadLocalRandom

JUC—ThreadLocalRandom 伪随机数生成器源码深度解析
未完待续……

后续我将会继续详细介绍JUC包的每一部分的重点内容、源码!

如有需要交流,或者文章有误,请直接留言。另外希望点赞、收藏、关注,我将不间断更新各种Java学习博客!

  • 11
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值