Java架构技术进阶

资深阿里P8大佬十年经验总结“Java并发编程核心方法与框架笔记

2021-03-17  本文已影响0人  架构小菜

首先我们先来了解一下什么是 并发编程

并发的概念:同时拥有两个或更多的线程,如果是单核CPU,则这多个线程交替获取CPU资源,轮流执行,同一时刻只有一个处于执行状态,其它线程处于其它状态(JVM模型中,线程都有哪些状态?初始状态、就绪状态、运行中状态、阻塞、等待、超时等待、终止);如果是多核CPU,则核心数个线程将同时获取CPU资源,同时执行,多余的线程仍然需要和这些执行中的线程交替获取CPU资源。

为什么大佬要写这份笔记?

早在几年前笔者就曾想过整理一份与 Java 并发包有关的笔记。因为市面上所有的 Java 学习资源都是以 1 章或 2 章的篇幅介绍 Java 并发包技术,这就导致对 Java 并发包的讲解并不是非常详尽,包含的知识量远远不够,并没有完整覆盖 Java 并发包的知识点。

这份笔记将给大家一个完整的视角,秉承 “大道至简” 的主导思想,只介绍 Java 并发包开发中最值得关注的内容,希望能抛砖引玉,以个人的一些想法和见解,为大家拓展出更深入、全面的思路。

笔记适用于一下这些对象:

本笔记有一下几个特点:

由于内容较多,本次将展示部分,如果看得不过瘾想更加深入地了解本笔记彻底掌握 Java 并发编程 可在文末了解详情。

第一章 Semaphore和Exchanger的使用

第一章讲解了 SemaphoreExchanger 类的使用,学完本章后,能更好地控制线程间的同步性,以及线程间如何更好、更方便地传输数据。

  1. Semaphore的使用
  2. Exchanger的使用
  3. 本章总结

第二章 CountDownLatch和CyclicBarrier的使用

第二章是第一章的延伸,主要讲解了CountDownLatchCyclicBarrier 类的使用及在Java并发包中对并发访问的控制。本章主要包括SemaphoreCountDownLatchCyclicBarrier 的使用,它们在使用上非常灵活,所以对于API的介绍比较详细,为读者学习控制同步打好坚实的基础。

  1. CountDownLatch 的使用
  2. CyclicBarrier 的使用
  3. 本章总结

第三章 Phaser的使用

第三章是第二章的升级,由于 CountDownLatchCyclicBarrier类 都有相应的弊端,所以在 JDK1.7中新增了 Phaser类 来解决这些缺点。

  1. Phaser的使用
  2. 类PhaserarriveAndAwaitAdvance()方法测试1
  3. 类PhaserarriveAndAwaitAdvance()方法测试2
  4. 类PhaserarriveAndDeregister()方法测试
  5. 类PhasergetPhase()和onAdvance()方法测试
  6. 类PhasergetRegisteredParties()方法register()测试
  7. 类PhaserbulkRegister()方法测试
  8. 类PhasergetArrivedParties()getUnarrivedParties()方法测试
  9. 类Phaserarrive()方法测试1
  10. 类Phaserarrive ()方法测试2
  11. 类PhaserawaitAdvance(int phase)方法测试
  12. 类PhaserawaitAdvanceInterruptibly(int)方法测试1
  13. 类PhaserawaitAdvanceInterruptibly(int)方法测试2
  14. 类PhaserawaitAdvanceInterruptibly(int)方法测试3
  15. 类PhaserawaitAdvanceInterruptibly(int,long,TimeUnit)方法测试4
  16. 类PhaserforceTermination()isTerminated()方法测试
  17. 控制Phaser类的运行时机
  18. 本章总结

第四章 Executor与ThreadPoolExecutor的使用

第四章中讲解了Executor 接口ThreadPoolExecutor线程池的使用,可以说本章中的知识也是Java并发包中主要的应用技术点,线程池技术也在众多的高并发业务环境中使用。掌握线程池能更有效地提高程序运行效率,更好地统筹线程执行的相关任务。

  1. Executor接口介绍
  2. 使用Executors工厂类创建线程池
  3. ThreadPoolExecutor的使用
  4. 本章总结

第五章 Future和Callable的使用

第5章中讲解FutureCallable的使用,接口Runnable 并不支持返回值,但在有些情况下真的需要返回值,所以Future就是用来解决这样的问题的。

  1. FutureCallable的介绍
  2. 方法get()结合ExecutorService中的submit(Callable)的使用
  3. 方法get()结合ExecutorService中的submit(Runnable)isDone()的使用
  4. 使用ExecutorService接口中的方法submit(Runnable, T result)
  5. 方法cancel(boolean mayInterruptIfRunning)isCancelled()的使用
  6. 方法get(long timeout, TimeUnit unit)的使用
  7. 异常的处理
  8. 自定义拒绝策略RejectedExecutionHandler接口的使用
  9. 方法execute()submit()的区别
  10. 验证Future的缺点
  11. 本章总结

第六章 CompletionService的使用

第六章介绍Java并发包中的CompletionService的使用,该接口可以增强程序运行效率,因为可以以异步的方式获得任务执行的结果。

  1. CompletionService介绍
  2. 使用CompletionService解决Future的缺点
  3. 使用take()方法
  4. 使用poll()方法
  5. 使用poll(long timeout, TimeUnit unit)方法
  6. 类CompletionService与异常
  7. 方法Future submit(Runnable task, V result)的测试
  8. 本章总结

第七章 接口ExecutorService的方法使用

第七章主要介绍的是ExecutorService接口,该接口提供了若干方法来方便地执行业务,是比较常见的工具接口对象。

  1. ThreadPoolExecutor中使用ExecutorService中的方法
  2. 方法invokeAny(Collection tasks)的使用与interrupt
  3. 方法invokeAny()与执行慢的任务异常
  4. 方法invokeAny()与执行快的任务异常
  5. 方法invokeAny()与全部异常
  6. 方法invokeAny(CollectionTasks, timeout, timeUnit)超时的测试
  7. 方法invokeAll(Collection tasks)全正确
  8. 方法invokeAll(Collection tasks)快的正确慢的异常
  9. 方法invokeAll(Collection tasks)快的异常慢的正确
  10. 方法invokeAll(Collection tasks,long timeout,TimeUnit unit)先慢后快
  11. 方法invokeAll(Collection tasks,long timeout,TimeUnit unit)先快后慢
  12. 方法invokeAll(Collection tasks,long timeout,TimeUnit unit)全慢
  13. 本章总结

第八章 计划任务ScheduledExecutorService的使用

第八章主要介绍计划任务ScheduledExecutorService的使用,学完本章可以掌握如何将计划任务与线程池结合使用。

  1. ScheduledExecutorService的使用
  2. ScheduledThreadPoolExecutor使用Callable延迟运行
  3. ScheduledThreadPoolExecutor使用Runnable延迟运行
  4. 延迟运行并取得返回值
  5. 使用scheduleAtFixedRate()方法实现周期性执行
  6. 使用scheduleWithFixedDelay()方法实现周期性执行
  7. 使用getQueue()remove()方法
  8. 方法setExecuteExistingDelayedTasksAfterShutdownPolicy()的使用
  9. 方法setContinueExistingPeriodicTasksAfterShutdownPolicy()
  10. 使用cancel(boolean)setRemoveOnCancelPolicy()方法
  11. 本章总结

第九章 Fork-Join分治编程

第九章主要介绍Fork-Join分治编程。分治编程在多核计算机中应用很广,它可以将大的任务拆分成小的任务再执行,最后再把执行的结果聚合到一起,完全利用多核CPU的优势,加快程序运行效率。

  1. Fork-Join分治编程类结构
  2. 使用RecursiveAction让任务跑起来
  3. 使用RecursiveAction分解任务
  4. 使用RecursiveTask取得返回值与join()get()方法的区别
  5. 使用RecursiveTask执行多个任务并打印返回值
  6. 使用RecursiveTask实现字符串累加
  7. 使用Fork-Join实现求和:实验1
  8. 使用Fork-Join实现求和:实验2
  9. ForkJoinPool核心方法的实验
  10. ForkJoinTask对异常的处理
  11. 本章总结

第十章 并发集合框架

第十章主要介绍并发集合框架。Java 中的集合在开发项目时占有举足轻重的地位,在 Java并发包中也提供了在高并发环境中使用的Java集合工具类,读者需要着重掌握Queue接口的使用。

  1. 集合框架结构简要
  2. 非阻塞队列
  3. 阻塞队列
  4. 本章总结

最后

免费获取方式:点赞&关注后,私信【Java并发编程】获取免费下载链接!

上一篇下一篇

猜你喜欢

热点阅读