JUC 并发工具集简介

  JUC 简介

 自Java1.5版本开始,提供了java.util.concurrent(简称JUC)包,在此包中增加了在并发编程中常用的工具类,用于定义类似于线程的自定义子系统,包括线程池、异步 IO 和轻量级任务框架;还提供了设计用于多线程上下文中
的 Collection 实现等;

  UML 结构图

  JUC包内容看起来不少,我们通过UML来说明包内类之间的关系。

  首先来看一下java.util.concurrent.atomic包,由于Java中数据类型对于复核操作(非原子操作)在多线程环境下,很难保证运算结果的正确性,atomic包提供了Boolean、Integer、Long、Double等操作,来方便开发者在多线程环境下进行计算。

  注:UML图中使用橙色表示JUC包下类,灰色表示JUC包下内部类,白色表示非JUC包下类。

  java.util.concurrent.atomic包UML图如下:
在这里插入图片描述
  atomic包内,除Striped64及其子类,其他类都是在Java1.5版本进行集合框架重构时加入的,Striped64及其子类,是Java1.8版本中加入。atomic包提供了一系列操作简单、性能高效、并能保证线程安全的类去更新基本类型变量、数组元素、引用类型以及更新对象的属性值。atomic包下的类都是采用乐观锁去实现原子更新操作,具体实现方案为CAS。Java1.8版本,又提供Striped64(累加器),可以更加安全高效的对Long和Double类型进行计算。

  java.util.concurrent.locks包UML图如下:
在这里插入图片描述
  locks包,为Java开发者提供了另一种锁机制方案,synchronized作为内置实现,虽然随着版本更迭,性能大幅提高,但在某些场景下,还是稍显繁重。locks包基于AQS(即AbstractQueuedSynchronizer)框架实现了语言级锁机制,除提供与synchronized相似的ReentrantLock重入锁,还提供了ReentrantReadWriteLock读写锁。Condition类提供类似Object wait、notify/notifyAll功能。LockSupport提供线程阻塞功能。Java1.8版本中新增StampedLock,用来优化可重入读写锁,在可重入读写锁的基础上提供乐观读。

  java.util.concurrent主包UML图如下:

  实用工具类:
在这里插入图片描述
  线程安全集合:
在这里插入图片描述
在这里插入图片描述
  Fork/Join(分治算法)实现
在这里插入图片描述
  线程池实现:

在这里插入图片描述
  JUC相关异常:
在这里插入图片描述
  如以上一系列UML图中所示,主包下分为几个部分:实用工具类、线程安全集合、Fork/Join(分治算法)实现、线程池实现、JUC相关异常等。在实际应用中,基本囊括了大部分多线程应用场景,可以根据个人需求选用不同的工具。大部分工具都是在Java1.5版本重构时增加的,Java1.8版本时,对一些类进行了改造。

  总结

  JUC包内类与类之间结构如上所示,UML是基于Java1.8版本绘制,这个系列文章接下来会对UML所列类进行实际应用、示例演示和源码解析。请大家继续关注本系列其他博文。

猜你喜欢

转载自blog.csdn.net/securitit/article/details/106753221