美文网首页
2019-04-27 Java 并发编程知识梳理

2019-04-27 Java 并发编程知识梳理

作者: 竹blue | 来源:发表于2019-04-28 00:13 被阅读0次

并发编程的由来

 大家知道CPU 、内存、I/O设备的运行速度是坠崖式下降的。所以这就造成了当I/O设备在拉去资源时,CPU或内存是处于空闲状态,而程序中的语句大部分要访问内存,甚至有的还要去访问I/O设备,这就不可避免是的CPU处于空闲状态,而程序运行的快慢是有整体中最慢的设备运行速度决定的。进而为了合理的利用CPU的高性能,平衡三者之间的利用率,在计算机体系机构、操作系统、编程程序进行了优化。
 具体体现:
  1. CPU增加缓存,以均衡和内存的速度差异;
  2. 操作系统增加进程,线程来分时复用CPU,进而均衡和I/O设备的速度差异;
  3.编译优化程序的执行指令,使其更合理的利用CPU的缓存;

并发编程Bug的源头

  • 可见性
  • 原子性
  • 有序性

\color{red}{缓存}导致的可见性问题

可见性:一个线程对某资源的操作对其他线程是可见的。如下代码线程T1将对象Person的age修改为‘18’对线程T2是可见的。

@Date
public class Person{
  private String name;
  private String age;
  private Integer sex;
}

\color{red}{线程切换}带来的原子性问题

原子性:我们把一个或多个操作在CPU上执行而不被中断的特性称为原子性。

注意:CPU只能保证CPU级别的原子操作,而无法保证程序语句的在CPU执行的原子操作。

\color{red}{编译优化}带来的有序性问题

有序性:程序按照代码的先后顺序执行,而编译器在不影响最终结果的情况下为了优化性能,有时候会改变程序实际执行的顺序,这个时候如果在多线程运行环境中可能导致并发bug发生。

总结

 写好并发编程,首先要知道并发程序可能出现问题的地方,只有知道bug可能才出现的地方才能有的放矢,才能写出健壮的并发程序。(\color{red}{PS}:此次写的比较粗糙很多都没有流程图或者代码实例进行详细说明,后期和进行添加,谢谢大家的支持🙏。)

相关文章

  • 2019-04-27 Java 并发编程知识梳理

    并发编程的由来  大家知道CPU 、内存、I/O设备的运行速度是坠崖式下降的。所以这就造成了当I/O设备在拉去资源...

  • java并发编程知识梳理

    分享一个java并发编程知识点图谱Java并发知识图谱.png

  • java并发编程知识梳理

    结果 为什么不一样 解决方法 使用 synchronized 使用 juc包中的原子类 使用ReentrantLo...

  • 线程

    Java 并发编程:线程池的使用 Java 并发编程:线程池的使用java 多线程核心技术梳理 (附源码) 本文对...

  • 2020-03-20

    Java并发编程学习前期知识下篇 通过上一篇《Java并发编程学习前期知识上篇》我们知道了在Java并发中的可见性...

  • Java并发编程学习前期知识下篇

    Java并发编程学习前期知识下篇 通过上一篇《Java并发编程学习前期知识上篇》我们知道了在Java并发中的可见性...

  • Java并发编程知识点梳理

    一 并发编程基础知识 1.1 概念 并发编程是你编写的代码有可能在多线程环境中执行, 1.2 为什么要用并发编程...

  • Java并发编程:Lock Java并发编程:synchronized

  • 用代码说话:如何在Java中实现线程

    并发编程是Java语言的重要特性之一,“如何在Java中实现线程”是学习并发编程的入门知识,也是Java工程师面试...

  • Java 并发编程之JUC从 ReentrantLock 开始读

    我们都知道 Java 并发编程是个重点,而并发编程除了理论知识外,实际使用一般都通过 JUC(Java 并发工具包...

网友评论

      本文标题:2019-04-27 Java 并发编程知识梳理

      本文链接:https://www.haomeiwen.com/subject/vhnlnqtx.html