当前位置: 首页 > news >正文

【JavaEE】Thread类中run和start的区别

文章目录

  • 先说结论
  • Run方法
  • Start方法

先说结论

当你想要创建一个新的线程并执行某些任务时,你应该重写run方法以提供任务的具体实现,并通过调用start方法来启动新线程

run方法包含了线程应该执行的代码,但直接调用它并不会启动新的线程。

start方法用于启动新的线程,并在新线程中调用run方法。

Run方法

run方法是Thread类的一个普通方法,它包含了线程应该执行的代码。

当你创建一个新的线程时,你需要重写run方法,以提供线程应该执行的具体任务。

然而,直接调用run方法并不会启动新的线程。
相反,它只是在当前线程中顺序执行run方法中的代码,这与普通的方法调用没有区别。

Start方法

start方法是Thread类的一个特殊方法,用于启动一个新的线程
当你调用start方法时,Java虚拟机(JVM)会创建一个新的线程,并在该线程中调用run方法
这样,run方法中的代码就会在新的线程中并行执行,而不是在当前线程中顺序执行。

示例

public class MyThread extends Thread {  @Override  public void run() {  System.out.println("Running in a new thread: " + Thread.currentThread().getName());  }  public static void main(String[] args) {  MyThread myThread = new MyThread();  myThread.start(); // 启动新线程  System.out.println("Running in the main thread: " + Thread.currentThread().getName());  }  
}

创建了一个名为MyThread的类,它继承自Thread类并重写了run方法。
在main方法中,创建了MyThread的一个实例,并调用其start方法来启动一个新的线程。
同时,我们在main方法中打印了当前线程(即主线程)的名称。
运行这个程序,会看到两个线程(主线程和新线程)并行执行并打印出它们的名称。

在这里插入图片描述

  • run方法定义了线程要执行的任务,但直接调用它不会创建新线程。
  • start方法用于启动线程,它会导致JVM创建一个新的线程来执行该线程的run方法。
  • 要创建并启动线程,应该重写run方法以定义线程的行为,并通过调用start方法来启动线程。

通过正确使用start方法而不是直接调用run方法,可以充分利用Java的多线程功能,实现并行处理任务,提高程序的性能和响应能力。

相关文章:

  • 安卓国内ip代理app,畅游网络
  • HDFSRPC通信框架详解
  • 2024 年广西职业院校技能大赛高职组《云计算应用》赛项样卷
  • wireshark流量分析
  • 数值分析复习:逼近理论的应用——最小二乘问题、解超定、欠定方程组
  • C语言例4-35:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡、问鸡翁、鸡母和鸡雏各几何?
  • 极简wordpress网站模板
  • pip永久修改镜像地址
  • 【Flink】Flink 处理函数之基本处理函数(一)
  • STM32-01基于HAL库(CubeMX+MDK+Proteus)仿真开发环境搭建(LED点亮测试实例)
  • Redis 教程系列之Redis 事务(十六)
  • 前端理论总结(css3)——css优化的方法
  • 线程通信同步
  • 低代码与数字化转型:重塑企业技术生态的新引擎
  • STM32之HAL开发——串口配置(源码)
  • angular组件开发
  • gf框架之分页模块(五) - 自定义分页
  • Javascript设计模式学习之Observer(观察者)模式
  • java正则表式的使用
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • PHP 7 修改了什么呢 -- 2
  • vue-cli在webpack的配置文件探究
  • WebSocket使用
  • 机器学习学习笔记一
  • 前端路由实现-history
  • 如何设计一个比特币钱包服务
  • 算法-插入排序
  • 详解NodeJs流之一
  • ( 10 )MySQL中的外键
  • (2)STL算法之元素计数
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (黑马C++)L06 重载与继承
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (四)汇编语言——简单程序
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .Net 垃圾回收机制原理(二)
  • .NET/C# 的字符串暂存池
  • .NET中使用Redis (二)
  • .stream().map与.stream().flatMap的使用
  • @ComponentScan比较
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [@Controller]4 详解@ModelAttribute
  • [04]Web前端进阶—JS伪数组
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [20190401]关于semtimedop函数调用.txt
  • [Android Pro] Notification的使用
  • [Android]Android P(9) WIFI学习笔记 - 扫描 (1)
  • [dfs搜索寻找矩阵中最长递减序列]魔法森林的秘密路径
  • [Docker]五.Docker中Dockerfile详解
  • [hive] posexplode函数
  • [java] 23种设计模式之责任链模式