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日

相关文章

  • 搭建Tomcat 8源码开发环境的步骤详解

    搭建Tomcat 8源码开发环境的步骤详解 Tomcat是Apache旗下的一个轻量级web应用服务器,它支持Servlet和JSP等Java Web开发技术。如果我们需要在Tomcat源码基础上进行二次开发,那么需要搭建Tomcat源码开发环境,本文将详细讲解如何搭建Tomcat 8源码开发环境的步骤。 环境准备 JDK:需要安装JDK开发工具,Tomca…

    Java 2023年5月19日
    00
  • Java如何把文件夹打成压缩包并导出

    Java 通过 ZipOutputStream 类提供了将一个文件夹打成压缩包并导出的功能。以下是详细的攻略: 第一步:导入ZipOutputStream类 为了使用ZipOutputStream类,需要先将其导入到你的Java代码中。可以使用以下代码: import java.io.FileOutputStream; import java.io.IOEx…

    Java 2023年5月19日
    00
  • Java实现作业调度的示例代码

    下面是Java实现作业调度的示例代码的攻略: 1. 理解作业调度 在计算机系统中,作业是指用户提交的一项任务。作业调度是指操作系统针对用户提交的作业对其进行管理和调度,使其能够高效地执行。作业调度是一个重要的操作系统功能,可以根据用户的需求和系统资源的使用情况,对作业进行优先级、并发度、执行方式等的调度。 2. 利用Java实现作业调度 Java语言具有很好…

    Java 2023年5月18日
    00
  • 详解Spring Boot Mysql 版本驱动连接池方案选择

    下面我就详细讲解“详解Spring Boot Mysql 版本驱动连接池方案选择”的完整攻略。 一、Mysql 版本驱动 Mysql 版本驱动是连接 Mysql 数据库必不可少的一个组件。其作用是提供 Mysql 数据库的连接库,以便和应用程序进行交互。在选择连接 Mysql 数据库的驱动时,我们需要考虑以下几个方面: 驱动的版本与 Mysql 服务器的版本…

    Java 2023年6月16日
    00
  • Java获取json数组对象的实例讲解

    获取JSON数组对象是Java中常见的操作,通常在与API交互、解析数据等场景中经常需要使用。下面是步骤: 步骤 引入相关依赖 首先需要引入相关的依赖,包括JSON解析库和HTTP库,通常使用的是Jackson库和HttpClient库。 <dependencies> <dependency> <groupId>com.f…

    Java 2023年5月26日
    00
  • Mybatis Plus插件三种方式的逆向工程的使用

    下面是Mybatis Plus插件三种方式的逆向工程的使用攻略: 一、准备工作 首先,我们需要在使用Mybatis Plus之前构建一个SpringBoot项目,并且引入Mybatis Plus相关的依赖。 <!– 引入Mybatis Plus核心依赖 –> <dependency> <groupId>com.baom…

    Java 2023年5月20日
    00
  • 算法详解之回溯法具体实现

    确定性算法一般都是利用了数据的某些特殊结构,或者特定的规律,因此算法的速度会很快,但是对于一些问题,无法利用这些特殊信息,这时候我们只能用搜索的方式来解决。回溯法就是这样一种搜索方法,它一般用于解决组合和排列问题,主要是枚举出所有可能的解,再判断哪些是符合条件的。以下是回溯法具体实现的攻略。 一、回溯法的概念 回溯法,也叫试探法,是一种有序的、系统的、逐步地…

    Java 2023年5月19日
    00
  • java实现简单的扫雷小游戏

    讲解”Java实现简单的扫雷小游戏”的攻略,以下是具体步骤: 第一步:界面设计 扫雷游戏主要分为三个步骤:游戏开始、游戏进行中、游戏结束。我们需要根据这些状态设计出对应的UI界面,具体需要设计的内容包括: 开始界面:包括游戏标题、游戏难度选择、开始游戏按钮。 进行中界面:包括剩余雷数、当前用时、扫雷主界面、游戏菜单等。 结束界面:包括胜利或失败的提示、重新开…

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