java并发编程

转自:https://segmentfault.com/a/1190000015558984

并发

为了追求更高的计算速度,硬件工程师们将单核cpu扩展为多核cpu,在这样的背景下,而软件行业也为了更充分的利用硬件资源研发出了多线程编程。多线程编程将cpu的计算能力发挥的淋漓尽致,应用程序的性能也得到极大的提升。

 

java并发编程图解

J.U.C包简介

J.U.C边发包,就是JDK的核心工具包,java.util.concurrent包,此包在老版本JDK中只是有 synchronizd、wait、notify这些常用的工具类,而这些基础的工具类并不能实现复杂的并发编程。需要程序员自行封装并发模块来执行特定的业务场景。

juc-locks锁框架、juc-atomic原子类框架、juc-sync同步器框架、juc-collections集合框架、juc-executors执行器框架

juc-locks锁框架

JDK1.5+后,Doug Lea根据一系列常见的多线程设计模式,提供了一些锁工具,用来对synchronizd、wait、notify进行增强和补充。

juc-locks的结构

UML图

 

juc-atomic 原子类框架

之前对java原始类型和引用类型的并发操作都是通过锁机制来实现。在JDK1.5之后,引入了java.util.concurrent.atomic,里边包含AtomicInteger、AtomicLong、AtomicBoolean等java原始与引用类型的映射类,他们采用的是"无锁算法",可以实现线程安全的操作Integer、Long、Boolean等类型。

juc-atomic结构图

UML图

juc-sync 同步器框架

 

JDK1.5之后还引入了同步器类,针对不同的场景有不同的同步器。

对应关系如下:

同步器名称作用
CountDownLatch倒数计数器,构造时设定计数值,当计数值归零后,所有阻塞线程恢复执行;其内部实现了AQS框架
CyclicBarrier循环栅栏,构造时设定等待线程数,当所有线程都到达栅栏后,栅栏放行;其内部通过ReentrantLock和Condition实现同步
Semaphore信号量,类似于“令牌”,用于控制共享资源的访问数量;其内部实现了AQS框架
Exchanger交换器,类似于双向栅栏,用于线程之间的配对和数据交换;其内部根据并发情况有“单槽交换”和“多槽交换”之分
Phaser多阶段栅栏,相当于CyclicBarrier的升级版,可用于分阶段任务的并发控制执行;其内部比较复杂,支持树形结构,以减少并发带来的竞争
  
  

 

juc-sync 同步器框架

 

JDK1.5之后还引入了同步器类,针对不同的场景有不同的同步器。

对应关系如下:

 

juc-collections 集合框架

J.U.C中还有对集合类的同步工具,根据类型可以划分为:符号表、队列、Set集合、列表,这个针对不同的场景也有不同的类,

结构如下图:

阻塞队列的分类及特性如下表:

队列特性有界队列近似无界队列无界队列特殊队列
有锁算法ArrayBlockingQueueLinkedBlockingQueue、LinkedBlockingDeque/PriorityBlockingQueue、DelayQueue
无锁算法//LinkedTransferQueueSynchronousQueue

juc-executors 执行器框架

   executors里边采用的是线程池机制,在使用过程中可以通过线程的启动、执行、关闭来实现并发编程的操作。

    Executors框架主要包含的模块有:线程池、Executor,Executors,ExecutorService、CompletionServince,Future、Callable。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值