【原创】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. Qt char * 与 const char * 的转换

    char *ch1="hello11"; const char *ch2="hello22"; ch2 = ch1;//不报错,但有警告 ch1 = (char ...

  2. ES6下的Function.bind方法

    在JavaScript的使用中,this的指向问题始终是一个难点.不同的调用方式,会使this指向不同的对象.而使用call,apply,bind等方式,可改变this的指向,完成一些令人惊叹的黑魔法 ...

  3. fastdfs+nginx make时报错fatal error:fdfs_define.h: 没有那个文件或目录

    环境: ubuntu 18.04.1 fastdfs-nginx-module_v1.16 root@wang-machine:~/桌面/FastDFS# cd nginx-1.8.1/root@wa ...

  4. js-dom运动我有废话要说

    今天整个图片上传剪切的功能 我终于不负众望不卑不亢 毫无意外的没写上 写点新得 留给N年后爱看不看的自己 咋整呢 百度之 demo一下,我就知道 屁不多放 切入正题 在js运动时候要注意布局 布局写不 ...

  5. ACID原则

    ACID原则是数据库事务正常执行的四个,分别指原子性.一致性.独立性及持久性. 事务的原子性(Atomicity)是指一个事务要么全部执行,要么不执行.也就是说一个事务不可能只执行了一半就停止了.比如 ...

  6. axios统一封装

    本文代码参考了网上别人的资料,经过修改而来 /** * Created by zxf on 2017/9/6. * 封装统一的ajax请求,统一拦截请求,对不同的请求状态封装 * 通常说, ajax ...

  7. 向MyEclipse的项目中导入js文件时,出现小红叉

    这个问题困扰我很久.刚开始时,也没有解决,因此也在网上寻找解决方法,还是没能解决.最近做项目时再一次出现了这样的问题,于是决定还是再找找办法.在此,分享一下自己的解决方法,给正处于痛苦中的童鞋们带来解 ...

  8. Ionic3学习笔记(八)使iOS端、Android端 Navbar 透明化

    本文为原创文章,转载请标明出处 若要使iOS端 Navbar 透明,只需要给 ion-navbar 添加 transparent 属性,但是Android端依旧会有一条border在,所以再给 ion ...

  9. 【转载】Scrapy安装及demo测试笔记

    Scrapy安装及demo测试笔记 原创 2016年09月01日 16:34:00 标签: scrapy / python   Scrapy安装及demo测试笔记 一.环境搭建 1. 安装scrapy ...

  10. Windows系统在Python2.7环境下安装numpy, matplotlib, scipy - Lichanghao Blog

    numpy, matplotlib, scipy三个包是科学计算和绘图的利器.安装它们既可以在网上下载exe安装包,也可以用python内置的包管理工具来下载安装,后者较为方便. 这几天做美赛要用到, ...