Java并发编程系列之三JUC概述

少年恃险若平地,独倚长剑凌清秋。这篇文章主要讲述Java并发编程系列之三JUC概述相关的知识,希望能为你提供帮助。
上篇文章为解决多线程中出现的同步问题引入了锁的概念,上篇文章介绍的是Synchronized关键字锁,本篇文章介绍更加轻量级的锁Lock接口及引出JUC的相关知识。
本文不力争阐释清楚JUC框架的所有内容,而是站在一定的高度下,了解Juc下包的设计与实现。
一、LOCK锁概述
实现同步的另外一种方式是Lock锁。
Lock锁是一个接口,其所有的实现类为:

  • ReentrantLock(可重入锁)
  • ReentrantReadWriteLock.ReadLock(可重入读写锁中的读锁)
  • ReentrantReadWriteLock.WriteLock(可重入读写锁中的写锁)
【Java并发编程系列之三JUC概述】与synchronized不同的是,使用LOCK锁与其有六个区别
1 synchronized 是java内置关键字,Lock 是一个接口
2 synchronized 无法判断是否获取锁,Lock 可以判断是否获取锁
3 synchronized 可以自动释放锁,Lock 必须手动释放锁,如果不释放就会造成死锁
4 同一个锁对象,线程A synchronized获取之后,线程B只能等待,造成阻塞,Lock 并不会等待
5 synchronized 可重入锁,不可中断,非公平锁,Lock 可重入锁,可以判断,非公平锁(可设置)
6 synchronized 适合少量同步代码,Lock 适合大量同步代码
Lock接口位于 java.util.concurrent.locks 包下,在父级的包下有两个包。
  • java.util.concurrent:包下主要是包括并发相关的接口与类,阻塞队列、线程池等,里面包含 59 个类或者接口
  • java.util.concurrent.atomic: 该包下主要包括原子性操作相关的类,比如常用的AtomicInteger、AtomicBoolean、AtomicIntegerArry等,里面包含18个类或者接口
其中父级的包java.util .concurrent涉及到Java多线程最重要的一部分——JUC编程。
二、JUC概述
JUC就是java.util .concurrent工具包的简称。这是一个处理线程的工具包,JDK 1.5开始出现的,在此包中增加了在并发编程中很常用的工具类。
用于定义类似于线程的自定义子系统,包括线程池,异步 IO 和轻量任务框架;
还提供了设计用于多线程上下文中的 Collection 实现等;
下图为JUC涉及到的所有知识点。
Java并发编程系列之三JUC概述

文章图片

JUC应该包括五个部分的内容。
1、Lock框架 ① 接口: Condition②接口: Lock③接口: ReadWriteLock④抽象类: AbstractOwnableSynchonizer⑤抽象类(long): AbstractQueuedLongSynchronizer⑥ 核心抽象类(int): AbstractQueuedSynchonizer⑦锁常用类: LockSupport⑧锁常用类: ReentrantLock⑨锁常用类: ReentrantReadWriteLock⑩锁常用类: StampedLock2、Tools类 ①工具常用类: CountDownLatch②具常用类: CyclicBarrier③工具常用类: Phaser④ 工具常用类: Semaphore⑤工具常用类: Exchanger3、Collections: 并发集合并发集合的类结构关系
Java并发编程系列之三JUC概述

文章图片

①Queue: ArrayBlockingQueue②Queue: LinkedBlockingQueue③Queue: LinkedBlockingDeque④Queue: ConcurrentLinkedQueue⑤ Queue: ConcurrentLinkedDeque⑥ Queue: DelayQueue⑦ Queue: PriorityBlockingQueue⑧Queue: SynchronousQueue⑨Queue: LinkedTransferQueue⑩List: CopyOnWriteArrayList⑩①Set: CopyOnWriteArraySet⑩②Set: ConcurrentSkipListSet⑩③ Map: ConcurrentHashMap详细分析请看: [JUC并发集合: ConcurrentHashMap详解](), 包含了对JDK 7和JDK 8版本的源码分析。
⑩④ Map: ConcurrentSkipListMap
4、Atomic: 原子类
其基本的特性就是在多线程环境下,当有多个线程同时执行这些类的实例包含的方法时,具有排他性,即当某个线程进入方法,执行其中的指令时,不会被其他线程打断,而别的线程就像自旋锁一样,一直等到该方法执行完成,才由JVM从等待队列中选择一个另一个线程进入,这只是一种逻辑上的理解。
实际上是借助硬件的相关指令来实现的,不会阻塞线程(或者说只是在硬件级别上阻塞了)。
①基础类型:AtomicBoolean,AtomicInteger,AtomicLong②数组:AtomicIntegerArray,AtomicLongArray,BooleanArray③引用:AtomicReference,AtomicMarkedReference,AtomicStampedReference④FieldUpdater:AtomicLongFieldUpdater,AtomicIntegerFieldUpdater,AtomicReferenceFieldUpdater5、Executors: 线程池线程池类结构关系
Java并发编程系列之三JUC概述

文章图片

①接口: Executor② ExecutorService③ScheduledExecutorService④AbstractExecutorService⑤FutureTask⑥ 核心: ThreadPoolExecutor⑦核心: ScheduledThreadExecutor⑧核心: Fork/Join框架⑨工具类: Executors通过以上的章节我们不难看出,JUC体系的内容也是非常庞大的,通过这篇文章能对JUC的整个体系能有所了解我们的目的就达到了。
接下来的文章会分明别类的对这些类和接口进行详细的阐述分析。

    推荐阅读