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

文章目录

  • 1 JUC包的整体结构与功能概述
  • 2 学习文章
    • 2.1 locks部分
      • 2.1.1 AQS
      • 2.1.2 ReentrantLock
      • 2.1.3 ReadWriteLock
      • 2.1.4 LockSupport
    • 2.2 collections部分
      • 2.2.1 并发集合
        • 2.2.1.1 ConcurrentHashMap
        • 2.2.1.2 ConcurrentLinkedQueue
        • 2.2.1.3 CopyOnWriteArrayList
        • 2.2.1.4 CopyOnWriteArraySet
        • 2.2.1.5 ConcurrentSkipListMap
        • 2.2.1.6 ConcurrentSkipListSet
      • 2.2.2 并发队列
        • 2.2.2.1 ArrayBlockingQueue
        • 2.2.2.2 LinkedBlockingQueue
        • 2.2.2.3 PriorityBlockingQueue
        • 2.2.2.4 SynchronousQueue
        • 2.2.2.5 DelayQueue
        • 2.2.2.6 LinkedTransferQueue
        • 2.2.2.7 LinkedBlockingDeque
    • 2.3 atomic部分
      • 2.3.1 atomic
      • 2.3.2 Unsafe
    • 2.4 executor部分
      • 2.4.1 executor
    • 2.5 tools部分
      • 2.5.1 CountDownLatch
      • 2.5.2 CyclicBarrier
      • 2.5.3 Semaphore
      • 2.5.4 ThreadLocalRandom

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学习博客!

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

  1. java concurrent包的学习(转)

    java concurrent包的学习(转) http://my.oschina.net/adwangxiao/blog/110188 我们都知道,在JDK1.5之前,Java中要进行业务并发时,通常 ...

  2. java反射 pdf_java反射学习笔记整理.pdf

    java反射学习笔记整理.pdf 还剩 15页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: Java 反射笔记 ...

  3. java juc 包_JUC java并发包

    1. JUC 简介 在 Java 5.0 提供了java.util.concurrent(简称JUC)包,在此包中增加了在并发编程中很常用的工具类, 用于定义类似于线程的自定义子系统,包括线程池,异步 ...

  4. JAVA矩阵包JAMA学习

    原文链接:JAMA:Java矩阵包 API文档链接:线性代数Java包 JAMA jama是一个非常好用的java的线性代数软件包.适用于日常编程可能碰到的各种矩阵运算问题,提供了一个优雅的简便的解决 ...

  5. 2018.7-2019.7一周年Java进阶架构师技术文章整理 建议收藏

    其实师长的公众号从2017年就开始发技术文章了,但是因为某些原因(就是懒)太监了许久,直到2018.7的时候才恢复更新.不知不觉中,已经更新了一年的广告,在没广告的日子里,顺带更新技术文章,截至201 ...

  6. 腾讯云 对象存储Java文件上传 学习资料整理

    # 初始化AmazonS3 前置要求: 获取密钥对:secretID:secretKey 有效Endpoint:nos-eastchina1.126.net 安装SDK --> 即Maven依赖 ...

  7. 2015 深度学习文章整理

    国内外从事计算机视觉和图像处理相关领域的著名学者都以在三大顶级会议(ICCV,CVPR和ECCV)上发表论文为荣,其影响力远胜于一般SCI期刊论文,这三大顶级学术会议论文也引领着未来的研究趋势.CVP ...

  8. java juc包多线程编程案例:Executor入门示例

    * 认识Executor*/ package com.zxl.juc.c_026_01_ThreadPool;import java.util.concurrent.Executor;public c ...

  9. Java学习笔记整理-知识梳理+JDK1.8详细文档

    链接:java开发手册 提取码:kes8 链接:JDK1.8详细文档 提取码:n9zo JavaSE 面向对象编程(Object-oriented programming) 封装 类(class) 类 ...

  10. 【JDK源码】java.lang包常用类详解

    接下来的几天开始JDK源码的学习和总结,之前看<java编程思想>的时候看到java的基础知识有很多,其中支撑着这些基础的基础中的基础当属JDK.JDK的基础代码里面又分了很多基础的模块, ...

最新文章

  1. JAVA目录树(全功能),Java+ajax实现
  2. C#生成唯一的字符串或者数字
  3. Cadvisor源码分析监控项
  4. 46.Express框架 GET 方法和POST 方法
  5. cocos2d-x plist使用
  6. 限制oracle数据库表的输出记录条数
  7. 冰与火之歌:「时间」与「空间」复杂度
  8. groovy:gradle
  9. 增大表名最大长度_风电叶片材料的发展变迁史,及风力发电机叶片长度发展历程...
  10. mssql数据库简繁体互转
  11. 漂流瓶html5,微信又搞事情?漂流瓶下线,居然还有这些新功能...
  12. driver nvidia web_黑苹果 macOS 10.13.6 17G66 安装 nVidia WebDriver
  13. GPS 相关知识科普
  14. SpringBoot——springboot SPI原理与实战
  15. word表格边框消失怎么办_为什么我的word表格没了边框 - 卡饭网
  16. rtorrent ubuntu端命令行种子下载器
  17. 利用python识别身份证号后获取年龄和性别信息
  18. 关于4月2号OpenAI大面积封停亚洲(中国大陆)帐号的问题和应对策略
  19. 个人如何打破部门墙_做事要有霸气
  20. 孩子坐姿不正,不仅影响视力!还影响学习成绩!

热门文章

  1. 通过池塘配置ip实验
  2. html页面排版会乱,窗口缩放导致页面排版错乱的解决方法
  3. 手算逆元及手动模拟扩展欧几里得算法及思路推导
  4. [词性] 四、形容词
  5. 利用python和GUI实现照片或证件照迅速更换背景底色,还可以自定义背景底色
  6. 人工智能AI系列 - 元宇宙 - 2D虚拟人
  7. android9彩蛋小米触发不了,小米9成功运行基于Android Q的MIUI系统:初版BUG较多
  8. vim 快捷键 总结-编辑文件
  9. 计算机中常用单位是什么意思,常用单位的换算(含温度、长度、计算机单位、面积以及数量级含义).doc...
  10. python 哈希_python实现哈希集合