Java 并发编程的艺术概要

栏目: Java · 发布时间: 6年前

内容简介:重读下《Java并发编程的艺术》,根据目录以及自己的学习习惯,重新排序了目录结构,更容易切入。可以根据这些概要更好的复习与回顾。

重读下《Java并发编程的艺术》,根据目录以及自己的学习习惯,重新 排序 了目录结构,更容易切入。可以根据这些概要更好的复习与回顾。

1.Java 并发编程基础

  • 1.1 理解线程,分别从 什么是线程、为什么要使用多线程、线程优先级、线程的状态、Daemon线程角度来讲述

  • 1.2 启动和终止线程,分别从构造线程、启动、终断和终止角度讲述

  • 1.3 线程间通讯,分别从volatile和synchronized 关键字、等待通知、管道输入和输出、Thread.join()、ThreadLocal使用角度讲述

2.Java 中的线程池

  • 2.1 从线程池原理、线程池使用:创建、提交任务、关闭、配置、监控角度来讲述。补充:知道几种常见的线程池,理解参数配置

  • 2.2 流程是提交线程-核心线程池是否已满- 队列是否已满-线程池是否已满-按照策略处理无法执行的任务

  • 2.3 线程池基本参数如:corePoolSize线程池基本大小-任务队列-ThreadFactory-线程池最大数量-饱和策略

3.Executor 框架

  • 3.1 理解Executor接口框架,其成员主要:ThreadPoolExecutor、ScheduledThreadPoolExecutor、Future接口、Runnable接口、Callable接口,工具类Executors

  • 3.2 ThreadPoolExecutor详解,上述框架的核心类,分别从 FixedThreadPool、singleThreadExecutor、CachedThreadPool角度讲述

  • 3.3 理解一个知识点即:FutureTask,异步计算的结果,明白其作用、使用、实现原理

4.Java 并发容器和框架

  • 4.1 要知道ConcurrentHashMap出现的原因,实现关键点记住分段锁、Segment等,另外同类型的要知道ConcurrentLinkedQueue

  • 4.2 知道 Java 中的阻塞队列,阻塞队列实现原理即当队列满了不会让你继续入队,出队同理,典型的阻塞队列如 ArrayBlockingQueue、LinkedBlockingQueue等

  • 4.3 一个少见的知识点 Fork/Join框架

5.Java 中的并发 工具

  • 5.1 等待多线程完成的 CountDownLatch,允许一个或者多个线程等待其他线程完成操作

  • 5.2 同步屏障 CyclicBarrier ,让一组线程到达一个屏障,直到最后一个线程到达,屏障解除。注意对比 CountDownLatch 的区别

  • 5.3 控制线程并发数的 Semaphore,协调各类线程让其合理的使用公共资源

  • 5.4 线程间交换数据的 Exchanger

6.Java 中的锁

  • 6.1 Lock接口 其实现原理基本上都是通过聚合了一个AQS的子类来完成线程访问控制的

  • 6.2 队列同步器 AQS是实现锁的关键,其使用一个int成员变量表示同步状态,通过内置的FIFO队列完成资源获取线程的排队工作

  • 6.3 重入锁 ReentrantLock 表示该锁能够支持一个线程对资源的重复加锁

  • 6.4 读写锁 可以同一时间允许多个线程访问,通过分离读锁和写锁,并发性比一般的排他锁有了很大提升

  • 6.5 Condition接口,理解它的作用,可以更加精细的控制多线程的唤醒与休眠

  • 6.x 这部分一个常见的对比就是Sync与Lock的区别联系。从中要知道悲观锁与乐观锁的概念、公平锁与非公平锁的概念。

7.Java 并发编程底层实现原理

  • 7.1 volatile的应用与原理,记住其实现关键字内存屏障,记得要对比Sync的区别和联系

  • 7.2 synchronized的实现原理与应用 ,记住JVM基于进入和退出Monitor对象来实现方法和代码块同步的 对于普通方法,锁是当前实例对象 对于静态同步方法,锁是当前类的Class对象 对于同步方法块,锁是Sync括号里配置的对象

  • 7.3 原子操作的实现原理,Java中实现原子操作是锁和CAS操作。CAS操作面临一个ABA和循环时长问题

8.Java 内存模型

  • 8.1 Java内存模型的基础,关键问题:通信和同步

  • 8.2 重排序 编译器和处理器会对操作进行重排序

  • 8.3 顺序一致性

  • 8.4 volatile的内存语义

  • 8.5 锁的内存语义

  • 8.6 final的内存语义 这一点在日常的博客中见的比较少,切入点可能是在多线程如何确保用final修饰的常量不会被改变?或者说final修饰的变量在一个线程中被赋值,另一个线程中会不会得到同样的数值?

  • 8.7 happens-before,如果一个操作结果需要对另一个操作结果可见,则这两个操作之间必须具备happens-before关系

  • 8.8 双重检查锁定与延迟初始化,经典的单利双锁问题

9.Java 中的13个原子操作

  • 原子操作比较容易理解,经典问题类似:i++操作是否线程安全?JDK1.5开始提供Atomic包来保证原子操作安全,一共有13个操作。

10.Java 并发编程实战

  • 这部分就理解下生产者与消费者、多生产者与多消费者、线程池与生产消费者模式

以上所述就是小编给大家介绍的《Java 并发编程的艺术概要》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

九败一胜

九败一胜

李志刚 / 北京联合出版公司 / 2014-9-1 / 42.00元

所有的创业者都面临着很多问题,困惑不是个人的,是有共性的。 除了自身去摸索着石头走路,他们还可以通过学习,从那些在创业路上走得更远的创业者身上学到经验、教训。 这本书的主角——王兴,恰好就是一个很好的学习对象。出生于1979年的王兴,很早就创业了,2004他就开始和同学一块创业,2005年做出了校内网;2007年,他又做出了饭否网——这是中国最早的类似twitter的网站。 ......一起来看看 《九败一胜》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具