java 线程中start方法与run方法的区别详细介绍

  1. 什么是线程

Java 中,我们可以通过 java.lang.Thread 类创建线程。线程是一个可以独立运行的子任务。与程序中的其他子任务不同,线程在操作系统层面上是一种独立的执行单元。在单个应用程序内,多个线程可以同时执行,每个线程都有自己的栈和局部变量,线程之间可以共享堆上的变量。由于线程在同时执行,因此在多线程编程中需要引入线程同步、锁和互斥等概念来保证数据的一致性和线程安全。

Java 线程的创建和运行分为两个步骤,分别是:

  • 通过继承 java.lang.Thread 类或实现 java.lang.Runnable 接口的方式创建线程;
  • 调用线程对象的 start() 方法启动线程。

  • start() 方法和 run() 方法的区别

start() 方法和 run() 方法都是线程的启动方法,但是它们的执行效果是不同的。

  • start() 方法用于启动一个新线程,该线程会在新的 JVM 栈中独立运行。start() 方法调用后立刻返回,新线程在 JVM 中独立运行,并且就绪线程池中的其它线程可能会在新线程运行之前执行。

  • run() 方法是线程体的逻辑代码,在 start() 方法被调用后,JVM 会自动调用该方法。run() 方法不会启动一个新的线程,而是在当前线程中执行。因此,如果直接调用 run() 方法,它会在当前线程中执行,不会启动新的线程。

下面是一个例子:

public class ThreadTest implements Runnable {
    @Override
    public void run() {
        System.out.println("Thread started!");
    }

    public static void main(String[] args) {
        Thread thread = new Thread(new ThreadTest());
        thread.start(); // 启动新线程
        // thread.run(); // 不会启动新线程,直接在当前线程中执行
    }
}

在上面的例子中,我们创建了一个实现 java.lang.Runnable 接口的类 ThreadTest。在 run() 方法中,我们打印了一条消息。在 main() 方法中,我们创建一个新的线程对象,并传入实例化的 ThreadTest 类。当我们调用 thread.start() 启动线程后,JVM 会自动调用 ThreadTest 类中的 run() 方法,输出 "Thread started!"

如果我们取消注释掉 thread.run(),直接在当前线程中执行,程序只会输出 "Thread started!",并不会启动新的线程。

  1. 总结

在 Java 线程中,start() 方法和 run() 方法是线程的启动方法,但是它们的执行效果是不同的。start() 方法会启动一个新的线程,而 run() 方法不会启动新线程,只会在当前线程中执行。

在实际开发中,我们应该优先使用 start() 方法来启动线程,避免使用 run() 方法直接在当前线程中执行,从而提高程序的并发处理能力。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 线程中start方法与run方法的区别详细介绍 - Python技术站

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

相关文章

  • JSONObject toJSONString错误的解决

    当使用Java中的JSONObject类的toJSONString()方法将Java对象序列化为Json字符串时,可能会出现错误。本文将提供一些错误的解决方法。 错误1:No serializer found 当使用toJSONString()方法将Java对象序列化为Json字符串时,可能会出现以下错误: org.codehaus.jackson.map.…

    Java 2023年5月26日
    00
  • Spring Security 自定义资源服务器实践过程

    下面我为你详细讲解“Spring Security 自定义资源服务器实践过程”的完整攻略。 前言 Spring Security 是一款非常流行的安全框架,可以帮助我们管理应用程序中的用户认证、授权、攻击防护等方面的安全问题。其中,Spring Security 的资源服务器模块可以帮助我们提供对受保护资源的安全访问控制机制,本文就是围绕如何自定义资源服务器…

    Java 2023年6月3日
    00
  • Tomcat之web应用的目录组成结构_动力节点Java学院整理

    以下是详细的攻略。 1. 概述 在使用Tomcat进行Web开发时,每个Web应用程序都有特定的目录结构。在这个目录结构中,存放了Web应用程序相关的文件,包括Web应用程序的资源、配置文件、class文件、静态文件等。在进行Web应用的开发和部署时,了解这些文件所在的目录结构是非常重要的。 2. 目录结构 在Tomcat中,每个Web应用程序都必须有一个独…

    Java 2023年6月2日
    00
  • 精通Java接口的使用与原理

    精通Java接口的使用与原理 什么是接口 Java接口是一个抽象编程结构,定义了类或对象应该实现的一组方法及其签名。接口在Java中为多态性提供了一种体系结构和模板。它仅仅定义了方法的名称、参数和返回类型,而没有方法的实现。接口可以看做是一种“契约”,规定了实现接口的类或者对象需要满足的“协议”。 接口可以在Java中起到以下几个作用: 接口帮助我们定义一套…

    Java 2023年5月26日
    00
  • netbeans中的快捷键有哪些?netbeans中常用快捷键大全

    NetBeans是一款跨平台的集成开发环境,该软件为开发者提供了一系列实用的快捷键,提高了开发的效率。下面将为大家介绍在NetBeans中常用快捷键大全。 常用快捷键列表 下面是一些常用的快捷键列表: Ctrl + S: 保存当前打开的文件 Ctrl + Shift + S: 另存为当前打开的文件 Ctrl + N: 打开新文件 Ctrl + Shift +…

    Java 2023年5月20日
    00
  • java异常级别与捕获的示例代码

    下面是关于Java异常级别与捕获的详细攻略: 异常级别 Java异常的级别(或称之为异常的分类)按照继承体系分为三个大类:Error、Exception、RuntimeException。其中Error和RuntimeException是Java语言中最常见的两种异常。下面我们分别来介绍这三类异常的特点: Error Error是Java中的严重问题,一般都…

    Java 2023年5月27日
    00
  • Java中线程用法总结

    下面是Java中线程用法总结的完整攻略。 线程的基本概念 线程是指在单个程序中同时执行多个任务。可以将其想象成许多互相独立运行的小程序,这些程序可以在同一时间运行。在Java中,线程是由Thread类创建的对象表示的。使用线程的主要原因是可以更好地利用现代计算机CPU的多个核心,提高程序的效率。 线程的创建 创建线程的方式主要有两种: 继承Thread类 实…

    Java 2023年5月26日
    00
  • java实现学生成绩档案管理系统

    Java实现学生成绩档案管理系统攻略 系统概述 学生成绩档案管理系统是一个简单的学生成绩管理工具,实现对学生成绩、个人信息的添加、查看、修改和删除等操作。本系统采用Java编写,使用MySQL作为后台数据库。 系统功能 本系统实现以下功能: 添加学生成绩和个人信息 查看学生成绩和个人信息 修改学生成绩和个人信息 删除学生成绩和个人信息 技术准备 开发工具:E…

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