【原创】Java并发编程系列1:大纲

一个人能力当中所蕴藏的潜能,远超过自己想象以外。

为什么要学习并发编程

随着现今互联网行业的迅猛发展,其业务复杂度、并发量也在不断增加,对程序的要求变得越来越高,传统的线性模型也越来越不适用。
同时,计算机软硬件技术的发展,也为多程序同时执行提供了底层的保证,使得并发编程成为主流。
“需求端”和“供给端”都为并发编程提供了巨大的应用空间,所以并发编程已经成为一项必备技能。
而正如开篇所引用《Java并发编程实践》的那句话一样,编写正确的并发程序很难,但是比起并发程序对实际应用的性能提升、用户体验的提升,承受这点折磨是完全有必要的。
同时,并发编程模型相比于传统的线性编程模型,在设计模式和设计思想上也是有很大区别的。
可能有些程序员平常的工作并不会显式的并发相关,比如自己去写一个信号量,或者用一个线程池,但是实际上在我们的应用中却是处处都是并发的影子,学好并发编程对日常工作、对技术深造有很大帮助,即使工作中用得少,并发编程也会是面试的重要一部分。

系统学习并发编程

编写正确的程序并不容易,而编写正确的并发程序就更难了。 ——《Java并发编程实践》

并发编程涉及到操作系统的线程知识,Java的并发理论、各种并发框架和工具,以及线程池的使用。
比如说线程池,如果你不能确定线程池的几个参数的含义,如何能用的好一个线程池呢?
Java并发编程的知识点繁多分散,要学好它,一定要先有一个整体的认识,要有一个学习脉络,循序渐进。那么就由我来帮助你建立一个清晰的Java并发编程的脉络:

  1. 线程基础:线程是操作系统调度执行任务的最小单位,可以认为是并发编程的核心基础;线程的生命周期,启动和终止;线程间如何通信如何同步;线程死锁是怎么回事;一些重要概念的理解区分。
  2. Java内存模型:Java内存模型的抽象结构;并发要解决的三大问题;Java并发的三大关键字的内存语义和如何正确使用;happens-before规则;重排序;锁究竟是什么;CAS到底是什么。
  3. Java中的锁:Lock接口与synchronized有什么异同点;AQS是什么;重入锁;读写锁;LockSupport的使用;如何优化应用中的锁;
  4. Java并发容器和框架:JUC包下的容器框架ConcurrentHashMap、ConcurrentLinkedQueue、BlockQueue等如何正确使用;Fork/Join框架;ThreadLocal是什么。
  5. Java中的原子操作类:了解Java提供的一系列原子类,及其实现原理,并能正确使用。
  6. Java中的并发工具类:了解JUC包下的倒计时器CountDownLatch、同步屏障CyclicBarrier、控制并发线程数的Semaphore、用于线程间交换数据的Exchanger,了解其实现原理,并能正确使用。
  7. Java中的线程池:了解Java线程池的使用、参数配置、监控等;了解Executor框架下的ThreadPoolExecutor、ScheduleThreadPoolExecutor、FutureTask的使用和原理。
  8. 并发实践:结合以上并发知识进行实践,写出并发性能良好的代码。

Java并发编程大纲

这是一个专题,会按照上一节的脉络,讲解Java并发的知识技能。以下的思维导图会作为一个框架指导,希望也能对你的系统学习起到提纲挈领的作用。

【参考资料】

  1. 《Java并发编程的艺术》,方腾飞、魏鹏、程晓明著,机械工业出版社;
  2. 《Java并发编程之美》,翟陆续、薛宾田著,电子工业出版社;
  3. 《Java并发编程实践》,Brian Goetz、Time Peierls、Joshua Bloch、Joseph Bowbeer、David Holmes、Doug Lea著,韩错、方妙译,电子工业出版社;
  4. 《Java高并发程序设计》,葛一鸣、郭超编著,电子工业出版社。

本文由微型公众号【Dali王的技术博客】原创,扫码关注获取更多原创技术文章。

【原创】Java并发编程系列1:大纲的更多相关文章

  1. 原创】Java并发编程系列2:线程概念与基础操作

    [原创]Java并发编程系列2:线程概念与基础操作 伟大的理想只有经过忘我的斗争和牺牲才能胜利实现. 本篇为[Dali王的技术博客]Java并发编程系列第二篇,讲讲有关线程的那些事儿.主要内容是如下这 ...

  2. Java并发编程系列-(5) Java并发容器

    5 并发容器 5.1 Hashtable.HashMap.TreeMap.HashSet.LinkedHashMap 在介绍并发容器之前,先分析下普通的容器,以及相应的实现,方便后续的对比. Hash ...

  3. Java并发编程系列-(4) 显式锁与AQS

    4 显示锁和AQS 4.1 Lock接口 核心方法 Java在java.util.concurrent.locks包中提供了一系列的显示锁类,其中最基础的就是Lock接口,该接口提供了几个常见的锁相关 ...

  4. Java并发编程系列-(3) 原子操作与CAS

    3. 原子操作与CAS 3.1 原子操作 所谓原子操作是指不会被线程调度机制打断的操作:这种操作一旦开始,就一直运行到结束,中间不会有任何context switch,也就是切换到另一个线程. 为了实 ...

  5. Java并发编程系列-(2) 线程的并发工具类

    2.线程的并发工具类 2.1 Fork-Join JDK 7中引入了fork-join框架,专门来解决计算密集型的任务.可以将一个大任务,拆分成若干个小任务,如下图所示: Fork-Join框架利用了 ...

  6. Java并发编程系列-(1) 并发编程基础

    1.并发编程基础 1.1 基本概念 CPU核心与线程数关系 Java中通过多线程的手段来实现并发,对于单处理器机器上来讲,宏观上的多线程并行执行是通过CPU的调度来实现的,微观上CPU在某个时刻只会运 ...

  7. Java并发编程系列-(7) Java线程安全

    7. 线程安全 7.1 线程安全的定义 如果多线程下使用这个类,不过多线程如何使用和调度这个类,这个类总是表示出正确的行为,这个类就是线程安全的. 类的线程安全表现为: 操作的原子性 内存的可见性 不 ...

  8. Java并发编程系列-(8) JMM和底层实现原理

    8. JMM和底层实现原理 8.1 线程间的通信与同步 线程之间的通信 线程的通信是指线程之间以何种机制来交换信息.在编程中,线程之间的通信机制有两种,共享内存和消息传递. 在共享内存的并发模型里,线 ...

  9. Java并发编程系列-(9) JDK 8/9/10中的并发

    9.1 CompletableFuture CompletableFuture是JDK 8中引入的工具类,实现了Future接口,对以往的FutureTask的功能进行了增强. 手动设置完成状态 Co ...

随机推荐

  1. 《你不知道的Javascript》学习笔记

    简介 众所周知,JavaScript 既是一门充满吸引力.简单易用的语言,又是一门具有许多复杂微妙技术的语言,即使是经验丰富的JavaScript 开发者,如果没有认真学习的话也无法真正理解它们. 如 ...

  2. java面试题 -- 基础

    1.抽象和封装的不同点抽象和封装是互补的概念.一方面,抽象关注对象的行为.另一方面,封装关注对象行为的细节.一般是通过隐藏对象内部状态信息做到封装,因此,封装可以看成是用来提供抽象的一种策略.2.重载 ...

  3. HDU-1164-Eddy's research I(分解质因数)

    由于这道题目数据范围小,所以属于水题.可以采取暴力的做法来解决. 代码如下: #include"bits/stdc++.h" using namespace std; ; ]; v ...

  4. 在MVC模式下通过Jqgrid表格操作MongoDB数据

    看到下图,是通过Jqgrid实现表格数据的基本增删查改的操作.表格数据增删改是一般企业应用系统开发的常见功能,不过不同的是这个表格数据来源是非关系型的数据库MongoDB.nosql虽然概念新颖,但是 ...

  5. MongoDB启动.mongorc.js报错解决方法

    在bin目录下输入./mongo --norc 不去加载.mongorc.js

  6. Git学习小结 ~ Lethe's Blog

    学习自https://www.liaoxuefeng.com/wiki/896043488029600 一.创建版本库 (1) git init 初始化一个Git仓库 (2)添加文件到Git仓库,分两 ...

  7. C#使用正则表达式获取HTML代码中a标签里包含指定后缀的href的值

    //C#使用正则表达式获取HTML代码中a标签里包含指定后缀的href的值,表达式如下: Regex regImg = new Regex(@"(?is)<a[^>]*?href ...

  8. 一个简单的爬取b站up下所有视频的所有评论信息的爬虫

    心血来潮搞了一个简单的爬虫,主要是想知道某个人的b站账号,但是你知道,b站在搜索一个用户时,如果这个用户没有投过稿,是搜不到的,,,这时就只能想方法搞到对方的mid,,就是 space.bilibil ...

  9. 爬虫(三)解析js,抓取优酷免费视频的真实播放地址

    工具:google浏览器 + fiddler抓包工具 说明:这里不贴代码,[只讲思路!!!] 原始url = https://v.youku.com/v_show/id_XMzIwNjgyMDgwOA ...

  10. Mybatis笔记01-基本原理,配置文件,映射文件,以及调用过程

    Mybatis基本原理 应用程序找Mybatis要数据 mybatis从数据库中找来数据 2.1 通过mybatis-config.xml 定位哪个数据库 2.2 通过Category.xml执行对应 ...