直接调用 Java 线程的 run() 方法会发生什么?

文章目录

  • 前言
  • 回顾
    • `run()` 方法 vs `start()` 方法
      • `run()`方法
      • `start()`方法
  • 直接调用 `run()` 方法的影响
    • 直接调用 `run()` 方法
    • 调用 `start()` 方法
  • 示例解析
  • 结论
  • 个人简介

前言

  • 在Java中,多线程编程是一个重要的概念,尤其是在处理并发任务时。线程是Java中实现多线程的一种方式。在使用线程时,理解 run() 方法和 start() 方法之间的区别是至关重要的。本文将深入探讨如果直接调用线程的 run() 方法会发生什么。
  • 先说结论:直接调用 run() 方法不会启动一个新的线程,它只是普通方法调用,代码在当前线程中同步顺序执行。

回顾

  • Java 提供了继承 Thread 类、实现Runnable接口两种方式来实现线程,无论使用哪种方式,都需要重写 run() 方法,这是线程执行的入口点。启动一个线程通常使用 Thread 对象的 start() 方法,该方法会触发线程的启动,并最终调 用run() 方法。

run() 方法 vs start() 方法

run()方法

  • run()方法包含了线程要执行的代码。
  • 直接调用run()方法不会启动一个新线程,它只是在当前线程中执行run()方法体中的代码。
  • 换句话说,直接调用run()方法相当于调用一个普通的方法,没有并发行为。

start()方法

  • start()方法会创建一个新的线程,并在新的线程中执行run()方法。
  • 调用start()方法会使线程从“新建”状态变为“就绪”状态,等待CPU调度。

直接调用 run() 方法的影响

  • 为了更好地理解直接调用 run() 方法的影响,考虑以下示例代码:
class MyThread extends Thread {
    public void run() {
        System.out.println("Thread is running");
    }
}

public class Main {
    public static void main(String[] args) {
        MyThread thread = new MyThread();

        // 直接调用run()方法
        thread.run();
        
        // 调用start()方法
        thread.start();
    }
}
  • 在上述代码中,thread.run()thread.start() 的行为是完全不同的。

直接调用 run() 方法

  • 当thread.run()被调用时,输出“Thread is running”。这段代码在主线程中执行,没有启动新的线程。此时,主线程和线程对象的run()方法体是同步顺序执行的。

调用 start() 方法

  • 当thread.start()被调用时,输出“Thread is running”。这段代码在一个新线程中执行,与主线程并发运行。主线程和新启动的线程是同时执行的,体现了多线程的并发特性。

示例解析

  • 通过以下代码示例可以更清晰地看出区别:
class MyRunnable implements Runnable {
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println("Runnable running " + i);
        }
    }
}

public class Main {
    public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();
        Thread thread = new Thread(myRunnable);

        // 直接调用run()方法
        myRunnable.run();

        // 调用start()方法
        thread.start();
    }
}

// 输出
Runnable running 0
Runnable running 1
Runnable running 2
Runnable running 3
Runnable running 4
Runnable running 0
Runnable running 1
Runnable running 2
Runnable running 3
Runnable running 4
  • 前五行输出是 myRunnable.run() 直接调用产生的,后五行是 thread.start() 启动的新线程产生的。

结论

  • 直接调用 run() 方法不会启动一个新的线程,它只是普通方法调用,代码在当前线程中同步顺序执行。而调用 start() 方法则会启动一个新的线程,并在该线程中执行 run() 方法的代码。

个人简介

👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.

🚀 我对技术的热情是我不断学习和分享的动力。我的博客是一个关于Java生态系统、后端开发和最新技术趋势的地方。

🧠 作为一个 Java 后端技术爱好者,我不仅热衷于探索语言的新特性和技术的深度,还热衷于分享我的见解和最佳实践。我相信知识的分享和社区合作可以帮助我们共同成长。

💡 在我的博客上,你将找到关于Java核心概念、JVM 底层技术、常用框架如Spring和Mybatis 、MySQL等数据库管理、RabbitMQ、Rocketmq等消息中间件、性能优化等内容的深入文章。我也将分享一些编程技巧和解决问题的方法,以帮助你更好地掌握Java编程。

🌐 我鼓励互动和建立社区,因此请留下你的问题、建议或主题请求,让我知道你感兴趣的内容。此外,我将分享最新的互联网和技术资讯,以确保你与技术世界的最新发展保持联系。我期待与你一起在技术之路上前进,一起探讨技术世界的无限可能性。

📖 保持关注我的博客,让我们共同追求技术卓越。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在线客服源码系统全端通用 源码完全开源可以二次开发 带完整的安装代码包以及搭建教程

系统概述 在线客服源码系统采用了先进的技术架构&#xff0c;包括前端界面、后端服务、数据库等部分。前端界面采用了响应式设计&#xff0c;能够自适应不同的设备屏幕尺寸&#xff0c;为用户提供良好的使用体验。后端服务采用了高性能的服务器架构&#xff0c;确保系统的稳定…

中国首例!「DataKit」上架亚马逊云科技 Marketplace add-ons

在 2022 年的 re:Invent 大会上&#xff0c;亚马逊云科技宣布了一项重大更新&#xff1a;亚马逊云科技 Marketplace 为 Amazon Elastic Kubernetes Service&#xff08;Amazon EKS&#xff09;提供了附加组件的支持。这一创新功能极大地丰富了 EKS 的生态系统&#xff0c;使用户…

【力扣】重排链表

&#x1f525;博客主页&#xff1a; 我要成为C领域大神 &#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于分享知识&#xff0c;欢迎大家共同学习和交流。 给定一个单链表…

大模型训练数据

自《中共中央国务院关于构建数据基础制度更好发挥数据要素作用的意见》发布以来&#xff0c;我国数据要素建设不断深入&#xff0c;在国家数据局等 17 部门联合印发的《“数据要素 ” 三年行动计划&#xff08;2024 - 2026 年&#xff09;》进一步明确 “建设高质量语料库和基础…

邮件推送服务的高级功能有哪些?怎么使用?

邮件推送服务的效果如何评估&#xff1f;怎么选择邮件营销服务&#xff1f; 邮件推送服务不断发展&#xff0c;提供了丰富的高级功能&#xff0c;帮助企业提升营销效果&#xff0c;优化客户体验。AokSend将探讨一些邮件推送服务的高级功能&#xff0c;并说明它们如何为企业带来…

HTTP、MQTT、CoAP大比拼:谁才是物联网通信的王者?

物联网&#xff08;IoT&#xff09;时代&#xff0c;数以亿计的设备需要相互连接和通信&#xff0c;而超文本传输协议&#xff08;HTTP&#xff09;作为互联网的基石&#xff0c;凭借其简单易用、广泛应用等优势&#xff0c;也成为了物联网通信协议的有力竞争者。本文将深入浅出…

Windows重新安装安全中心解决白屏问题

重新安装Windows安全中心&#xff08;Windows Security Center&#xff09;涉及多个步骤&#xff0c;包括重置Windows安全功能和重新安装Windows安全应用。以下是详细的步骤&#xff1a; 1. 通过PowerShell重置Windows安全中心 打开PowerShell: 在开始菜单中搜索“PowerShell”…

ClickHouse vs. Elasticsearch:十亿行数据的较量

本文字数&#xff1a;15291&#xff1b;估计阅读时间&#xff1a;39 分钟 审校&#xff1a;庄晓东&#xff08;魏庄&#xff09; 本文在公众号【ClickHouseInc】首发 Meetup活动 ClickHouse 上海首届 Meetup 讲师招募中&#xff0c;欢迎讲师在文末扫码报名&#xff01; 引言 这…

mysql 主从延迟

mysql 主从延迟 下面这句话&#xff0c;不知道对不对 注意&#xff1a;开启并行复制后&#xff0c;如果想要Xtrabackup进行全量备份的话&#xff0c;那就必须还要开启gtid复制而不是传统的位点复制 精华推荐 | 【MySQL技术专题】「主从同步架构」全面详细透析MySQL的三种主从…

怎么加密文件夹?文件夹加密软件推荐

文件夹加密是保护电脑数据的重要方法&#xff0c;那么你知道怎么加密文件夹吗&#xff1f;下面小编就为大家推荐两款文件夹加密软件&#xff0c;帮助你安全保护重要文件夹。 文件夹加密超级大师 在加密电脑文件夹时&#xff0c;文件夹加密超级大师是你必须要了解的文件夹加密软…

基于Java仓储出入库管理系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f;感兴趣的可以先收藏起来&#xff0c;还…

基于Jmeter的分布式压测环境搭建及简单压测实践

写在前面 平时在使用Jmeter做压力测试的过程中&#xff0c;由于单机的并发能力有限&#xff0c;所以常常无法满足压力测试的需求。因此&#xff0c;Jmeter还提供了分布式的解决方案。本文是一次利用Jmeter分布式对业务系统登录接口做的压力测试的实践记录。按照惯例&#xff0…

【linux学习十七】文件服务管理

一、FTP FTP server:FTP(File Transfer Protocol,文件传输协议 )是 TCP/IP 协议组中的协议之一 软件包&#xff1a;vsftpd/安装 yum -y install vsftpd//准备文件 touch /var/ftp/abc.txt //注释:FTP服务器的主目录:“/var/ftp/”&#xff0c;是FTP程序分享内容的本机目录…

Docker 安装和加速

目录 1.安装 2.了解 docker 信息 3.查询状态 4. 重新启动Docker 1.安装 yum install –y docker 2.了解 docker 信息 cat /etc/redhat-release 3.查询状态 systemctl status docker 4.支持 1.12 的 docker 镜像加速 sudo mkdir -p /etc/docker sudo tee /etc/docke…

stm32学习笔记---TIM输出比较(代码部分)定时器定时中断/定时器外部时钟

目录 第一个代码&#xff1a;定时器定时中断 Timer.c 初始化函数 初始化定时器的步骤 定时器的库函数 TIM_DeInit TIM_TimeBaseInit TIM_TimeBaseStructInit TIM_Cmd TIM_ITConfig TIM_InternalClockConfig TIM_ITRxExternalClockConfig TIM_InputTriggerSource …

一文读懂客户管理系统平台:概念、功能与应用场景介绍!

在当今竞争激烈的市场环境下&#xff0c;企业想要保持竞争力&#xff0c;不仅要有优质的产品和服务&#xff0c;更要有高效的客户管理手段。客户管理系统平台作为一种重要的工具&#xff0c;正在被越来越多的企业所青睐。那么&#xff0c;客户管理系统平台有什么用呢&#xff1…

fidder自动测试cookie脚本

前言 工作在使用fidder抓包时&#xff0c;经常需要找到一个请求携带的cookie中&#xff0c;真正校验了那些cookie&#xff0c;从而在代码中实现写入这些cookie的请求。这个过程除了根据经验快速过滤&#xff0c;就只能一个一个删除测试了。 所以我写了这个脚本&#xff0c;自动…

Telnet远程登录(Cisco)

Telnet 基于TCP/IP协议族 远程终端协议 在Internet上远程登录 VTY(Virtual Teletype) 通过IP连接物理上的终端 实现在Internet上 登陆和配置远程目标终端 A Router>enable Router#config Router(config)#hostname A A(config)#interface gigabitEthernet 0/0 A(confi…

ArkUI开发学习随机——得物卡片,京东登录界面

案例一&#xff1a;得物卡片 代码&#xff1a; Column(){Column(){Image($r("app.media.mihoyo")).width(200).height(200)Row(){Text("今晚玩这个 | 每日游戏打卡").fontWeight(700).fontSize(16).padding(4)}.width(200)Text("No.12").fontWe…

服务器数据恢复—raid故障导致部分分区无法识别/不可用的数据恢复案例

服务器数据恢复环境&#xff1a; 一台某品牌DL380服务器中3块SAS硬盘组建了一组raid。 服务器故障&#xff1a; RAID中多块磁盘出现故障离线导致RAID瘫痪&#xff0c;其中一块硬盘状态指示灯显示红色。服务器上运行的数据库在D分区&#xff0c;备份文件存放在E分区。由于RAID瘫…