• 5.run方法和start方法的区别


    run方法与start方法的区别

     

     引言

    上一节我们介绍了如何获取和设置线程的名称,本节将介绍run方法与start方法的区别,我们将从5个方面来具体说明它们的区别。

    第一个方面是位置,也就是方法所处的位置。第二个方面是类型,也就是方法是否为同步方法。第三个方面是作用,主要是看他们各自的功能有什么不同。第四个方面是线程数量,主要是看方法在执行过程中是否会产生新的线程。第五个方面是调用次数,主要是看方法调用多次,是否会出现新的问题。

    位置


    首先我们来看第一个方面,位置。run方法和
    start的方法都位于thread的类里面。

    不过 run方法是重写runnable接口的,这一点它是和start方案有点区别。

     类型

    我们再来看第二个方面,第二个方面是类型,run方法是非同步方法,而star方法是同步方法,意味着多个线程同时执行start方法时不会存在线程安全问题。

     作用

    接下来我们再来看第三个方面,第三个方面是作用,run方法的作用是存放任务代码的,例如任务,就是打印这段执行任务的现成的名称,

    而start的方法的作用是启动线程,线程启动以后它会自动去执行run方法,

    例如创建线程以后调用它的start的方法启动线程,线程启动以后他就会去执行任务中的run方法。

     线程数量

    接下来我们来看第四个方面。 第四个方面是线程数量,也就是说我们在方法执行的过程中,是否会产生新的线程。

    run方法在执行过程中不会产生新的线程,而start方法在执行过程中会产生一个新线程。

    我们可以通过一个例子来验证,自定义一个任务,任务的内容,就是打印当前正在执行任务的线程的名称。首先我们获取当前正在执行任务的线程,然后获取该线程的名称,最后打印该名称

    我们来执行这个任务,首先将任务创建出来,将任务传递给线程。 


    我们可以看到
    run方法的执行结果是main,说明执行过程中没有新线程产生

    原因就是我们现在代码所处的线程就是主线程,也就是main,所以没有产生新的线程。

    我们再来看看start方法的执行结果,start方法的执行结果是thread-0.产生的一个新线程,

    这个新的线程去执行了这个任务。通过验证得知run方法它不会产生新线程,而star的方法它就会产生一个新的线程。

    调用多次会不会出问题

    接下来我们来看第五个方面,第五个方面是方法调用多次会不会出问题,run方法可以被调用,无数次都不会产生问题,而start方法虽然说它可以被调用无数次,但是它会出问题原因。在于线程只能被启动一次,它不能重复启动,唉我们来验证一下。 


    接着我们刚刚的程序。我们再次调用
    start的方法来启动这个线程,看看执行结果会怎样,

    果然是出来问题的,发生了异常,那么这个异常是线程状态异常,一般我们重复启动线程就会造成这个异常。

     

     总结

    最后我们来总结一下本节的内容,本节介绍了run方法与star方法的区别,位置方面他们都处于thread类中,只不过呢 run方法是重写runnable接口的.

    类型方面,run方法是非同步方法,而start方法是同步方法。 

    作用方面,run方法的作用是存放任务代码,而start的方法呢是启动线程线程数量方面,执行run方法它不会产生新线程,而执行start方法会产生新线程,

    调用次数方面,run方法可以被执行无数次,而star方法只能被执行一次,原因就在于线程不能被重复启动。 


      

    附录:

    笔记完整文本:

    上一节我们介绍了如何获取和设置线程的名称,本节将介绍run方法与打扰方法的区别,我们将从5个方面来具体说明它们的区别。第一个方面是位置,也就是方法所处的位置。第二个方面是类型,也就是方法是否为同步方法。第三个方面是作用,主要是看他们各自的功能有什么不同。第四个方面是线程数量,主要是看方法在执行过程中是否会产生新的线程。第五个方面是调用厕所,主要是看方法调用多次,是否会出现新的问题。 首先我们来看第一个方面,位置,让方法和star的方法都位于Siri的类里面。不过 run方法是重解字run到我接口的,这一点它是和start方案有点区别。我们再来看第二个方面,第二个方面是类型,run方法是非同步方法,而star方法是同步方法,意味着多个线程同时执行此二方法时不会存在建成安全问题。接下来我们再来看第三个方面,第三个方面是作用,让方法的作用是存放任务代码的,例如任务,就是打印这段执行任务的现成的名称,而star的方法的作用是启动线程,线程启动以后它会自动去执行run方法,例如创建线程以后调用它的star的方法启动线程,线程启动以后他就会去执行任务中的run方法。接下来我们来看第四个方面。 第四个方面是线程数量,也就是说我们在方法执行的过程中,是否会产生新的线程,让方法在执行过程中不会产生新的线程,而star方法在执行过程中会产生一个新线程,我们可以通过一个例子来验证,制定一个任务任务的内容,就是打印当前正在执行任务的线程的名称。首先我们获取当前正在执行任务的线程,然后获取该县城的名称,最后答应该、名称,我们来执行这个任务,首先将任务创建出来,将任务传递给县城。 我们可以看到run方法的执行结果是me,说明执行过程中没有新线程产生,原因就是我们现在代码所处的线程就是主线程,也就是问,所以没有产生新的,线程。我们再来看看star方法的执行结果,star方法的执行结果是three的零产生的一个新线程,这个新的线程去执行了这个任务,通过验证得知run方法它不会产生新线程,而star的方法它就会产生一个新的线程。接下来我们来看第五个方面,第五个方面是方法调用多次会不会出问题,让方法可以被调用,无数次都不会产生问题,而star方法虽然说它可以被调用无数次,但是它会出问题原因在于线程只能被启动一次,它不能重复启动,唉我们来验证一下。 接着我们刚刚的程序写,我们再次调用12的方法来启动这个线程,看看执行结果会怎样,果然是出来问题的,发生了异常,那么这个异常是现成状态异常,一般我们重复启动线程就会造成这个异常。最后我们来总结一下本节的内容,本节介绍了run方法与star方法的区别,位置方面他们都处于斯瑞的泪中,只不过呢 run方法是重写字runner接口的类型方面,run方法是非同步方法,而star方法是同步方法。 作用方面,让方法的作用是存放任务代码,而star的方法呢是启动线程线程数量方面,执行run方法它不会产生新线程,而执行start方法会产生新线程,调用次数方面,run方法可以被执行无数次,而star方法只能被执行一次,原因就在于线程不能被重复启动。

     

  • 相关阅读:
    回溯法 | 子集树:装载问题
    再谈01背包 | 使用【跳跃点集合】代替【求解矩阵】解题
    线性代数 | 行列式的计算
    慢,也是一种态度
    回溯法 | 图的m着色问题
    回溯法 | 旅行商问题(TSP问题)
    回溯法 | n皇后问题
    基数排序 RadixSort
    03.父工程pom、整合测试、SpringBootApplication注解
    02.自定义banner、全局配置文件、@Value获取自定义配置、@ConfigurationProperties、profiles配置
  • 原文地址:https://www.cnblogs.com/cj8357475/p/16085969.html
Copyright © 2020-2023  润新知