java基本教程之Thread中start()和run()的区别 java多线程教程

Java基本教程之Thread中start()和run()的区别

在Java多线程编程中,我们经常需要创建一个线程对象并调用它的start()方法来启动新的线程,但是也有些开发者选择直接调用线程对象的run()方法来执行线程代码。那么,start()和run()方法有什么区别呢?

区别

  1. start()方法会启动一个新的线程并在新的线程中执行相应的run()方法,而直接调用run()方法只是调用了一个普通的方法而已,这个方法还是在主线程中执行的,没有启动新的线程。所以,直接调用run()方法并不会启动新线程。

  2. start()方法会将新线程放入线程调度器中,当获得CPU时间片后便可以执行run()方法。而直接调用run()方法并不会启动新线程,所以run()方法也不会放入线程调度器中,而是由主线程直接调用执行。

示例说明

示例一

public class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("执行MyThread的run()方法...");
    }

    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        // 调用start()方法启动线程
        myThread.start();
        System.out.println("执行main()方法...");
    }
}

输出结果:

执行main()方法...
执行MyThread的run()方法...

从结果中可以看到,main方法和MyThread的run方法是同时执行的,而没有等到MyThread的run方法执行完毕再执行main方法。

示例二

public class MyThread2 extends Thread {
    @Override
    public void run() {
        System.out.println("执行MyThread2的run()方法...");
    }

    public static void main(String[] args) {
        MyThread2 myThread = new MyThread2();
        // 直接调用run()方法,不会启动新线程
        myThread.run();
        System.out.println("执行main()方法...");
    }
}

输出结果:

执行MyThread2的run()方法...
执行main()方法...

从结果中可以看到,MyThread2的run方法直接被main线程执行,没有启动新线程。

小结

在Java多线程编程中,start()和run()方法虽然看起来只有一个字母的差别,但是它们的作用却大相径庭。接下来的示例代码中,我们可以使用start()方法来启动新线程,而直接调用run()方法则只是个普通的方法调用。开发者在编写多线程程序时,必须要明确这两者之间的区别。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java基本教程之Thread中start()和run()的区别 java多线程教程 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • Java经典面试题汇总:JVM

    Java经典面试题汇总:JVM JVM是什么? JVM(Java Virtual Machine,即Java虚拟机)是Java平台的一个重要组成部分,也是整个Java技术体系的核心所在。它是Java实现“一次编写,到处运行”的重要基石,同时也是Java能够拥有强大的跨平台能力的主要原因之一。 当我们运行Java程序时,JVM会解释并执行Java字节码,最终把…

    Java 2023年5月23日
    00
  • 基于Java实现中文分词系统的示例代码

    下面是详细讲解基于Java实现中文分词系统的示例代码的完整攻略。 什么是中文分词 中文分词是将一段中文文本按照词语粒度切分,使每个词语都能成为文本独立处理的基本单位。中文分词是自然语言处理领域中的基础任务,其重要性不言而喻。 中文分词的实现 中文分词的实现方法有很多种,包括基于词典的正向最大匹配算法、逆向最大匹配算法、双向最大匹配算法等,也包括基于机器学习模…

    Java 2023年5月19日
    00
  • 使用java实现网络爬虫

    使用Java实现网络爬虫可以分为以下步骤: 1. 定义爬虫开始的入口URL 入口URL是爬虫开始爬取网页的地方,可以是指定的网页或是多个网页列表。定义入口URL的方式可以使用字符串形式,也可以使用类似Java URL类的URL对象。比如: String startUrl = "https://example.com"; URL url =…

    Java 2023年5月18日
    00
  • JAVA加密算法- 非对称加密算法(DH,RSA)的详细介绍

    JAVA加密算法- 非对称加密算法(DH,RSA)的详细介绍 什么是加密算法? 加密算法是一种可以在计算机系统中对数据进行加密和解密的方法。它通过某种函数来将明文转换成密文,在解密时再通过相应的函数把密文转成明文。 什么是非对称加密算法? 非对称加密算法是指加密和解密使用不同的密钥的加密算法。它需要一对密钥,用其中一个密钥加密的信息只能用另外一个密钥解密。 …

    Java 2023年5月19日
    00
  • Swagger2不被SpringSecurity框架拦截的配置及说明

    配置Swagger2不被SpringSecurity框架拦截的方法 在SpringBoot项目中,只需要在WebSecurityConfigurerAdapter的configure方法中配置放行Swagger的路径即可。示例代码如下: @Configuration @EnableWebSecurity public class SecurityConfig…

    Java 2023年5月20日
    00
  • Java十道入门易踩坑题分析前篇

    以下是“Java十道入门易踩坑题分析前篇”的完整攻略: 一、问题背景 该篇攻略主要是针对初学者容易踩坑的Java入门题目进行分析和讲解,旨在帮助初学者更好地理解Java编程的基础知识和基本语法。在该篇攻略中,将讲解含有多条示例。 二、题目分析 题目一:计算机系统与数据科学学院有n个学生,每个学生有m个成绩,求每个学生的平均成绩并输出。输入格式:第一行输入数据…

    Java 2023年5月19日
    00
  • SpringBoot深入分析运行原理与功能实现

    SpringBoot深入分析运行原理与功能实现 什么是SpringBoot SpringBoot是一个开源的、轻量级的框架,用于快速构建基于Spring框架的Web应用程序和微服务。相对于传统的Spring框架,它更加简单方便,提供了自动配置、嵌入式Web服务器等特性,使得开发者可以快速构建可靠的、健壮的Web应用程序。 以下是SpringBoot的一些特性…

    Java 2023年5月15日
    00
  • java分布式面试CAP分别代表含义分析

    下面是详细的讲解: 简介 CAP理论是分布式系统设计理论中重要的一个理论,其英文全称是Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性)。所谓的分区容错性指的是分布式系统中节点之间由于网络传输原因或其他意外情况,造成节点之间无法相互通信时,整个系统仍能正常运行。 三个含义 一致性(Con…

    Java 2023年5月24日
    00
合作推广
合作推广
分享本页
返回顶部