Java 杂谈java 并发编程J.U.C

Java并发编程知识点梳理

2019-03-09  本文已影响1人  cp_insist

一 并发编程基础知识

1.1 概念

并发编程是你编写的代码有可能在多线程环境中执行,

1.2 为什么要用并发编程模型?
1.3 并发量是越大越好吗?

程开多了不一定好,因为有线程上下文切换的时间开销;有可能多线程程序时间开销更长

1.4 Java的内存模型JMM
JMM内存模型

如上图所示,每一个线程都保存有共享变量的一份备份,并发编程的关键之出就是在于怎么保证每一个现成的本地变量和主存中共享变量的值统一

1.5 顺序一致性和指令重排序
class RecorderExample{
  int a = 0;
  boolean flag = false;
  public void writer() {
    a = 1;                  //1 
    flag = true           //2 
  }
  public void reader() {
   if(flag) {               //3
    int i = a*a;          //4
  }
  }
}

如上程序,单线程环境重步骤1和步骤2完全是可以重排序的,但是在多线程环境下,步骤1和步骤2重排序就有可能会导致错误。

1.6 Happens-before简介

在JMM中如果一个操作的结果需要对另外一个操作可见,那么这两个操作之间必须存在happens-before关系; 这两个操作既可以是在同一个线程中,也可以在不同的线程中。具体原则如下:

二 Java如何实现并发编程

2.1 多线程的实现方式
2.2 线程的状态
2.3 线程之间的通讯

三 并发编程中如何保证线程的安全性

3.1 保证线程安全的含义
3.2 Java保证线程安全实现方式
各种锁的优缺点

四 Java线程池的实现原理

1 为什么要使用线程池?
2 组成线程池的关键元素
线程池原理图
3 一个线程具体的提交流程如下:
线程提交流程图
4 如何关闭线程池
5 合理配置线程池

五 Executor框架简介

Java5开始讲线程的任务由原来的即负责工作单元也复制执行机制拆分为,工作单元由:Runnable和Callable负责,而执行机制由Executor负责

5.1 Executor框架简介
Executor框架原理

Executor框架由三部分组成

5.2 ThreadPoolExecutor详解

关键组成要素前一章节已经阐述过,这里主要阐述3种线程池的区别

5.3 ScheduledThreadPoolExecutor详解
5.4 FutureTast详解

参考文献

《Java并发编程的艺术》

上一篇下一篇

猜你喜欢

热点阅读