JUC—Java的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并发编程中非常有用的工具类,包括五个部分:
    a) locks部分:在java.util.concurrent.locks包中,提供更加强大的显式锁,比如 重入锁ReentrantLock、读写锁ReadWriteLock;
    b) atomic部分:在java.util.concurrent.atomic包中,提供原子变量类相关的功能,是构建非阻塞算法CAS的基础,比如AtomicInteger;
    c) executor部分:在java.util.concurrent包中,提供线程池相关的功能,用于批量创建、管理线程,比如ThreadPoolExecutor等,以及对线程任务的加强,比如Callable等
    d) collections部分:在java.util.concurrent包中,提供一系列高性能的并发容器,比如ConcurrentHashMap、CopyOnWriteArrayList等;
    e) tools部分:在java.util.concurrent包中,提供简单高效的同步工具类,如信号量Semaphore、闭锁CountDownLatch、栅栏CyclicBarrier等;

本文只是一个JUC的整体架构介绍,后续我们将会详细介绍JUC包的每一部分的重点内容、源码!

如果有什么不懂或者需要交流,可以留言。另外希望点赞、收藏、关注,我将不间断更新各种Java学习博客!

猜你喜欢

转载自blog.csdn.net/weixin_43767015/article/details/106952220
JUC