java 大道至简--多线程(1)

java 大道至简--多线程(1)

内容目录:

   一、概念,即是什么?

   二、原理,即为什么?

   三、特点,即有什么用?

   四、专业术语

正文:

  一、概念 

      先来个简单的例子,6月发洪水了,鱼塘里水满了,请问怎样让水最快排走?

      答案:用抽水机,更精确的答案,用多台抽水机,一台抽十分钟,那么十台抽呢?所以多台同时工作,效率快

     引申到程序里面,就是用多个线程去处理问题,线程在后面的专业术语中有解释的,各位不要着急。

二、原理(保证)

扫描二维码关注公众号,回复: 1492429 查看本文章

    原理其实更准确的应该说是保证,说白了就是java 采用什么机制来保证多线程,以下三点:

   1、原子性:原子,不可再分,原子性就是被认为不可再进行分解的动作,即为原子性

   2、内存一致性:保证计算机CPU中的高速缓冲带和计算机内存中的数据保持一致,我们在后面的虚拟机中做详细讲解

   3:重排序:虚拟机的优化机制,我们在后面的虚拟机中做详细讲解

 三、特点

   多线程的特点:

    这里仅代表个人观点,如有不全或错误的,请各位指出大家共同进步

   1、在特定的情况下使用多线程可以提高工作效率,注意是一定情况,我们做个测试当数据量超过百万级的时候,使用多线程可以明显提高效率

  2、由于虚拟机的重排序,所以多线程有一定的不确定性,这一点对于初学者有一定的难度

  3、对内存的掌控程度要求较高,对程序员的要求较高

四、专业术语

  所谓的专业术语其实就是多线程的而一些关键字,这里我们简单的解释一下常见关键字的用法和意义

 介绍之前,请思考一个问题?

java多线程的保证有三个,原子性、内存一致性、重排序,java到底是如何来保证这三个功能呢?

一、原子性

    原子性,不可再进行分割的操作,即为原子性,比如:1+1 这个操作对于计算机来说就是原子性的,它不能再分割了

   如 1++ ,这个操作就不是原子的,因为它可以继续分割 , 1 +1 = n ; n1 = n; 

  java使用一系列的原子操作来保证原子性,本章我们只讲概念,后面我们会继续分析多线程

二、内存一致性

  这里对计算机的工作原理做一个简单的介绍,为了高效处理数据,计算机会先将数据缓存到CPU的高速缓冲区,然后直接供CPU调用,请参看以下图例:


试想,CPU高速缓冲区和内存里面的数据不一致时,那么我们得到的结果就会出现误差,为了解决这种误差,java虚拟机采用了以下方式解决:

1、"探头式设计"(后面再虚拟机部分详解),以保证内存和高速缓冲行的一致性

2、使用volatile关键字,以保证所修饰变量的内存一致性

3、加锁, 后面文章我们详细论述

三、重排序

  重排序是java虚拟机内部的一种自我优化的功能,它会根据一定的规则,自动排列你所编写的代码,以保证最佳的执行效率,后面的虚拟机部分我门详细讲解


好了,初学线程,不要知道的太多,本章只要了解一下基本概念即可,学东西要循序渐进,关键是要抓住原理,正所谓大道至简 

猜你喜欢

转载自blog.csdn.net/xianghan_qq/article/details/80583102