JavaEE多线程基本概念 及 创建多线程程序的三种方式

Hello! 大家好JavaEE多线程基本概念 及 创建多线程程序的三种方式_第1张图片。(非常平庸的开场白 习惯一下)。此篇博客是我的“处女作”,因为是第一次写博客,在文章格式以及文章内容可能会有许多问题和缺陷。欢迎各位大神对我的文章进行指正!我定积极采纳与听取各位宝贵的建议,不断优化文章!

正文部分:

开门见山。本文主要讲解JavaEe中关于进程和线程的基本概念 及 多线程程序创建的三种常见方式。因本人在课程前部 和 中后部 观看了不同的教学视频。故理论概念的讲述较为浅,倾向于介绍三种创建方式。

目录


一、进程和线程的概念

二、多线程程序的三种方式

一、进程和线程的概念

        在了解线程和线程之前 我们需要了解 并发 并行 这两个概念。这两个概念将贯彻整个多线程的学习。当你被多线程的运作原理困扰时,及时回忆,有利于更好的学习与理解多线程。

        并发:指的是两个或多个事件在同一时间段内发生

JavaEE多线程基本概念 及 创建多线程程序的三种方式_第2张图片

        并行:指的是两个或多个事件在同一时刻同时发生

JavaEE多线程基本概念 及 创建多线程程序的三种方式_第3张图片

 了解完这两个概念,就正式进入线程与进程的介绍之中:

  • 进程:

  1. 专业:进程就是进入内存中执行 并占用临时内存空间进行运行的程序
  2. 通俗:就是你在电脑上打开的每一个程序 就是一个个的进程(如:QQ、微信、360浏览器、英雄联盟等)。
  • 线程:

  1. 专业:线程是进程中的一个执行单元,负责程序具体功能的执行。点击程序的某个功能时,就会开启一条通向CPU的路径,程序通过此路径执行具体功能,这就是线程。
  2. 通俗:程序提供的每一个功能,就是一个线程(如:打开微信 “朋友圈”和“添加好友”就是两个不同的线程)

介绍完线程和进程,就顺带讲解一下在多线程之中,关于线程的调度模式。对于线程的调度,主要有两种模式:

  • 分时调度:所有线程轮流使用CPU ,平均分配每个线程占用CPU的时间。(比如:有多个线程,那么每个线程都只使用CPU三分钟,不多不少。)
  • 抢占式调度:优先让优先级高的线程占用CPU 优先级相同则随机 (Java使用抢占式)

二、多线程程序的四种方式

        简单了解完进程和线程的相关基础知识后,我相信观看博客的各位同志还有着以下两大疑问:

        什么是多线程?如何创建多线程代码?

什么是多线程???

        多线程:就是在一个程序中,多个功能同时运作。拿我们最简单的一个代码HelloWorld举例


public class HelloWorld {
    public static void main(String[] var0) {
        System.out.println("Hello,World!");
    }
}

        此时我们可以看到 此程序中只有一个main方法(main线程),所执行的任务就是进行输出打印(也就是打印功能)。运行程序--->打印---->结束。而多线程呢,就是让我们能在打印的同时,还实现其他功能。

        相当于你和同学去食堂买饭,需要买炸鸡和奶茶。单线程情况下只有你一人,你作为main线程,要一个人去买这两种东西,又费时又费力。多线程情况下,你作为main线程,去买炸鸡或者汉堡,而你同学作为一个被开启的新线程,则承担了购买另一种事物的任务,此模式下效率高,任务执行的速度也就快了。

如何创建多线程程序???

        好了!理论基础知识说了这么多,终于到了激动人心的敲代码环节。俗话说“光说不练 屁用没有”。话不多说,开整!

 编写一个多线程代码 常用的方法一共有三种:

  1. 继承Thread类

            ①首先我们要创建两个类 这里简称为 A 和 B

            其中A为主方法所在类 。B(MyThread)作为继承Thread的子类

            ②然后 在B中重写run()方法。run方法的方法体表示的就是线程需要执行的任务(打印语句等等)

    JavaEE多线程基本概念 及 创建多线程程序的三种方式_第4张图片

            ③最后在 A中创建子类对象 ,通过对象名调用start( )方法,开启新的线程,执行run方法。(注意 这里博主还在主线程加入了一条输出语句 是为了更好的理解 多线程 多任务执行的这个概念,建议各位也可模拟一下 更好理解多线程代码)

    JavaEE多线程基本概念 及 创建多线程程序的三种方式_第5张图片

  2. 继承Runnable接口

        

  ①首先 我们要创建一个 【实现类】 来实现Runnable接口,并重写run方法

JavaEE多线程基本概念 及 创建多线程程序的三种方式_第6张图片

        ②然后在主方法类中创建实现类对象 同时创建Thread对象。并在参数列表里填入实现类对象名称,作为参数传入。

        ③通过Thread对象的对象名调用start方法。开启多线程,执行run方法

JavaEE多线程基本概念 及 创建多线程程序的三种方式_第7张图片

       3. Lambda表达式

        Lambda表达式是非常常用的创建多线程程序的创建方法。格式为:

        Thread 线程名称 =new Thread( ( )->){

                方法体

                }

        Thread t=new Thread(() ->{
        }

        此时中括号里可以直接编写多线程的任务。此举相当于是直接重写了run方法。最最重要的是,即使是Lambda表达式,写完之后也需要调用start方法,开启多线程,执行任务。

        JavaEE多线程基本概念 及 创建多线程程序的三种方式_第8张图片

    PS:

        我们可以发现 调用start方法几乎在每个方法中都用到。可想而知其的重要性!!!所以这里博主也引入注意来提醒大家!!!

        很多同学在编写完程序之后 可能会鬼使神差的头脑昏昏的调用了run方法,发现程序也跑了起来,也完成了打印工作。但其实!!! 这个举动根本没有开启多线程!!!!此时还是只有一个main线程在执行任务,它执行的任务,就是执行了这个run方法。

        run方法 和 start方法。两者的区别就在于:

  • run方法,描述的是只是线程应该做的任务。相当于你告诉了同学,应该去买什么食物

  • start方法。才是多线程的关键。调用了start方法,才会真正的开辟出一个线程,然后此线程调用了run方法。此时start之后,就出现了【main线程】和【构建出的新线程】两个线程!相当于你告诉同学应该买什么食物之后,踹了他一脚,让他动起来去买!!!懂否!同志们!

好了 本bo的处女作也就到此为止,带大家粗略的浅显的了解了一下多线程的相关基础知识,和如何构建多线程代码。本bo实力薄弱,实属小白。文中有很多描述的不到位甚至是知识欠缺的地方,希望大家多多体谅!多多提出意见,我及时改正!我们下次再见!

                

        

        

        

你可能感兴趣的:(java-ee)