1.JUC框架包含几个部分?
五个部分:
![](https://i-blog.csdnimg.cn/blog_migrate/8eda9f1f970172c8c2ca0a2e9018c1d3.png)
Lock框架和Tools类(把图中这两个放到一起理解)
Collections: 并发集合
Atomic: 原子类
Executors: 线程池
2.Lock框架和Tools哪些核心的类?
![](https://i-blog.csdnimg.cn/blog_migrate/747b9899192fd24ea41ad458499f7cb7.png)
Lock接口:用于提供比synchronized更加灵活和高级的线程同步控制,支持公平/非公平锁、可中断的获取锁、超时获取锁等功能。
ReentrantLock类:Lock接口的主要实现类,提供与synchronized类似的功能,但更加灵活,支持公平/非公平锁、可重入性、可中断的获取锁、超时获取锁等功能。
ReadWriteLock接口:提供读写锁的支持,用于控制多个线程对共享数据的读写操作。
ReentrantReadWriteLock类:ReadWriteLock接口的主要实现类,提供读写锁的功能,支持可重入性,同时支持多个线程同时读取共享数据,但只允许一个线程进行写操作。
Condition接口:用于在锁的基础上更加灵活地控制线程的等待和唤醒操作。
ReentrantLock.ConditionObject类:Condition接口的主要实现类,提供了等待和唤醒操作所需要的一系列方法。
Semaphore类:用于控制同时访问某个资源的线程数,可以用于实现资源池的管理等功能。
CountDownLatch类:用于控制多个线程的同步,可以让一个或多个线程等待其他线程执行完毕后再继续执行。
CyclicBarrier类:用于控制多个线程的同步,可以让多个线程在同一时刻到达同一个屏障点,然后继续执行。
Phaser类:用于控制多个线程的同步,支持多个阶段的同步,可以让多个线程在同一阶段结束后进入下一阶段,直到所有阶段都完成后才继续执行。
3.JUC并发集合哪些核心的类?
![](https://i-blog.csdnimg.cn/blog_migrate/9270227337b5f5d8dd31cb71a2171496.png)
ConcurrentHashMap:线程安全的哈希表,与 Hashtable 不同的是,它采用分段锁技术实现线程安全,多个线程可以同时访问不同的分段,从而大大提高了并发性能。
CopyOnWriteArrayList:线程安全的 ArrayList,基于“写时复制”技术实现,当有新元素添加到集合时,先将原始数据复制一份,然后在新的集合上添加新元素,最后用新集合替换旧集合。
CopyOnWriteArraySet:线程安全的 Set,基于 CopyOnWriteArrayList 实现,采用“写时复制”技术,保证了并发访问的安全性。
ConcurrentLinkedQueue:非阻塞队列,基于链表实现,支持高并发、高吞吐量的队列操作。
ConcurrentSkipListMap:跳表实现的 Map,线程安全,支持高并发、高吞吐量的并发操作。
ConcurrentSkipListSet:跳表实现的 Set,线程安全,支持高并发、高吞吐量的并发操作。
BlockingQueue:阻塞队列的接口,继承了 Queue 接口,提供了在队列已满或已空时的阻塞操作。
ArrayBlockingQueue:有界阻塞队列,底层基于数组实现,当队列已满时,put 操作会阻塞;当队列已空时,take 操作会阻塞。
LinkedBlockingQueue:基于链表实现的阻塞队列,可以指定容量,当队列已满时,put 操作会阻塞;当队列已空时,take 操作会阻塞。
PriorityBlockingQueue:基于优先级的无界阻塞队列,元素按照优先级从高到低排序,当队列为空时,take 操作会阻塞。
4.JUC原子类哪些核心的类?
JUC原子类是一组以原子方式更新基本数据类型的类,其中包含了很多核心的类,其中最常用的包括:
AtomicInteger系列:提供原子性的int类型操作,包括:AtomicInteger、AtomicIntegerArray、AtomicIntegerFieldUpdater。
AtomicLong系列:提供原子性的long类型操作,包括:AtomicLong、AtomicLongArray、AtomicLongFieldUpdater。
AtomicBoolean:提供原子性的boolean类型操作。
AtomicReference系列:提供原子性的对象类型操作,包括:AtomicReference、AtomicReferenceArray、AtomicReferenceFieldUpdater。
AtomicStampedReference:提供原子性的带版本号的对象引用类型操作,可以防止ABA问题。
AtomicMarkableReference:提供原子性的带标记位的对象引用类型操作,可以在对象引用的同时维护一个boolean类型的标记位。
这些原子类都是通过一些底层的机制来保证操作的原子性和可见性,比如利用CAS操作,利用volatile关键字等。在多线程环境下,使用这些原子类能够提高程序的并发性能和可靠性。
5.JUC线程池哪些核心的类?
![](https://i-blog.csdnimg.cn/blog_migrate/1dc8f793b6786e0021a57e75fff38648.png)
JUC线程池主要包括以下核心的类:
Executor 接口:定义了一个用于执行任务的方法 void execute(Runnable command),是线程池的顶级接口。
ExecutorService 接口:继承了 Executor 接口,定义了一些常用的线程池操作方法,例如提交任务、关闭线程池等。
ThreadPoolExecutor 类:是线程池的实现类,可以通过构造函数自定义线程池的各种参数,例如核心线程数、最大线程数、队列容量、线程工厂等。该类继承了 AbstractExecutorService 抽象类,实现了 ExecutorService 接口。
ScheduledExecutorService 接口:继承了 ExecutorService 接口,定义了延迟执行和周期执行任务的方法。
ScheduledThreadPoolExecutor 类:是线程池的实现类,可以通过构造函数自定义线程池的各种参数,例如核心线程数、最大线程数、队列容量、线程工厂等。该类继承了 ThreadPoolExecutor 类,实现了 ScheduledExecutorService 接口。
JUC 线程池的核心类可以通过自定义参数,灵活地创建和管理线程池,提高系统性能和资源利用率。