【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的多线程功能,实现并行处理任务,提高程序的性能和响应能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/577842.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

yolov5目标检测可视化界面pyside6源码(无登录版)

这个是yolov5pyside6实现目标检测可视化的代码,本套项目没有用户登录的功能,如需用户登录版,看另一篇文章:yolov5pyside6登录用户管理目标检测可视化源码_yolov5用户登入功能-CSDN博客

java入门学习Day02

本文介绍的内容主要有:java的注释(样式)、关键字、字面量。 一、java中的注释 1、基本语法 ① 单行注释 //注释信息 ② 多行注释 /* 注释信息1 注释信息2, */ ③ 文档注释 /** 注释信息1 注释信息2, */ public class…

vue3封装Element分页

配置当前页 配置每页条数 页面改变、每页条数改变都触发回调 封装分页 Pagination.vue <template><el-paginationbackgroundv-bind"$attrs":page-sizes"pageSizes"v-model:current-page"page"v-model:page-size"pageSize":t…

C#预处理器指令(巨细版)

文章目录 一、预处理器指令的基本概念二、预处理器指令的基本规则三、C# 预处理器指令详解3.1 #define 和 #undef3.2 #if、#else、#elif 和 #endif3.3 #line3.4 #error 和 #warning3.5 #region 和 #endregion 四、高级应用&#xff1a;预处理器指令的最佳实践4.1 条件编译的最佳…

量化交易软件开发定制的步骤

量化交易软件的定制开发是一个复杂而精细的过程&#xff0c;需要经过一系列步骤来确保最终交付的软件符合客户的需求并具有高度的可靠性和效率。以下是量化交易软件开发定制的主要步骤&#xff1a; 1. 需求分析与规划 在开始开发之前&#xff0c;首先需要与客户深入沟通&…

k8s安装traefik作为ingress

一、先来介绍下Ingress Ingress 这个东西是 1.2 后才出现的&#xff0c;通过 Ingress 用户可以实现使用 nginx 等开源的反向代理负载均衡器实现对外暴露服务&#xff0c;以下详细说一下 Ingress&#xff0c;毕竟 traefik 用的就是 Ingress 使用 Ingress 时一般会有三个组件: …

AI新工具 小模型也有大智慧Qwen1.5-MoE;大模型动态排行榜;马斯克更新Grok-1.5

✨ 1: Qwen1.5-MoE 阿里巴巴一款小型 MoE 模型&#xff0c;只有 27 亿个激活参数&#xff0c;但性能与最先进的 7B 模型&#xff08;如 Mistral 7B 和 Qwen1.5-7B&#xff09;相匹配。 Qwen1.5-MoE是一个使用混合专家模型&#xff08;Mixture-of-Experts&#xff0c;MoE&…

每日一练 两数相加问题(leetcode)

原题如下&#xff1a; 这道题目是一道链表题&#xff0c;我们对于这种链表类&#xff0c;很显然我们最后输出的是初始节点&#xff0c;所以我们要保留我们的初始头指针&#xff0c;那么我们的第一步一定是把头指针保留一份&#xff0c;然后再让头指针往后进行操作。那么我们进行…

java子集(力扣Leetcode78)

子集 力扣原题链接 问题描述 给定一个整数数组 nums&#xff0c;数组中的元素互不相同。返回该数组所有可能的子集&#xff08;幂集&#xff09;。解集不能包含重复的子集。可以按任意顺序返回解集。 示例 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#x…

KubeSphere 社区双周报|2024.03.15-03.29

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者&#xff0c;并对近期重要的 PR 进行解析&#xff0c;同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为&#xff1a;2024.03.15-03.29…

Java8之接口默认方法

Java8之接口默认方法 一、介绍二、代码1、接口2、实现类3、测试代码4、效果 一、介绍 在Java8中&#xff0c;允许为接口方法提供一个默认的实现。必须用default修饰符标记这样一个方法。默认方法也可以调用其他方法 二、代码 1、接口 public interface PersonService {void…

【CTFshow 电子取证】套的签到题

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…