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

为什么启动一个线程不用run()方法,而是用start()方法

在使用java多线程时,有三种方式创建线程 复习传送门
当使用继承Thread来实现多线程时,
我们会把线程执行的代码写在run() 方法中,
使用Thread的start()方法来启动一个线程。
代码如下:

public class ThreadDemo extends Thread{@Overridepublic void run() {System.out.println("this is demo thread :"+Thread.currentThread().getName());}public static void main(String[] args) {ThreadDemo t = new ThreadDemo();t.start();System.out.println("this is main thread :"+Thread.currentThread().getName());}
}

执行结果:

this is main thread :main
this is demo thread :Thread-0Process finished with exit code 0

main方法中,为什么不直接 调用 t.run() 来启动线程?
因为t.run()是调用实例方法(会直接在当前线程中执行run中的逻辑),
而start才是启动线程,在新线程中执行run方法里的逻辑。

我们来看看Thread类的 start 方法究竟做了什么?

    public synchronized void start() {if (threadStatus != 0)throw new IllegalThreadStateException();group.add(this);boolean started = false;try {start0();started = true;} finally {try {if (!started) {group.threadStartFailed(this);}} catch (Throwable ignore) {/* do nothing. If start0 threw a Throwable thenit will be passed up the call stack */}}}private native void start0();

可以看到,start() 方法中调用了 start0(),而 start0() 是一个native方法。
native 关键字表示该方法是一个本地方法,java中提供了机制可以调用C的方法,它可以通过动态库加载,可以通过navtive来调用。

Java中的线程,其实是由操作系统来提供的。
在Java高级语言与操作系统之间,是通过JVM来调用的。

线程的启动
start0()是JVM层面实现的方法。
start0() 方法会调用操作系统底层的指令去创建一个线程,并且启动线程。
操作系统通过调度算法,把生成的线程调度,分配给不同的CPU。
操作系统会调用JVM的run,最终调回Java Thread的run方法。
最终使得run中的逻辑在线程中运行。

当线程执行结束后,JVM会完成销毁。

相关文章:

为什么启动一个线程不用run()方法,而是用start()方法

在使用java多线程时,有三种方式创建线程 复习传送门 当使用继承Thread来实现多线程时, 我们会把线程执行的代码写在run() 方法中, 使用Thread的start()方法来启动一个线程。 代码如下: public class ThreadDemo extends Thread{O…...

Java File相关操作

文章目录File文件操作IO流处理流缓冲流转换流对象流File文件操作 利用File类来操作。 文件操作中常用到相对目录和绝对路径 package org.File; import java.io.File; public class demo01 { public static void main(String[] args) { try{ File file new File("…...

LabVIEW利用矢量量化直方图开发人脸识别

LabVIEW利用矢量量化直方图开发人脸识别通常,人脸识别系统会检查场景的静止图像或视频图像,然后使用存储的人脸数据库识别或验证场景中的一个或多个人。我程序专注于静止图像人脸识别,使用来自众所周知的人脸数据库的人脸图像,用于…...

RK3568工业开发板工控板说明

说明HW356X-GKA是采用中高端的通用型 SOC,一款基于Rockchip公司RK3568处理器的工控主板。主板标配处理器为Cortex-A55四核,最高主频2GHz的RK3568处理器,内置4GB DDR4内存(最大8GB),32GB eMMC存储。集成4核 arm架构 A55 处理器和Ma…...

JavaScript Web API 来构建你不了解的网站

随着技术的日新月异,为开发人员提供了令人难以置信的新工具和API。 但据了解,在100 多个 API中,只有5%被开发人员积极使用。 随着技术的日新月异,为开发人员提供了令人难以置信的新工具和API。但据了解,在100 多个 A…...

KeePass敏感信息明文传输漏洞复现 (CVE-2023-24055)

一、漏洞描述 漏洞简述 KeePass 是一款免费的开源密码管理器,可帮助您以安全的方式管理您的密码。您可以将所有密码存储在一个数据库中,该数据库由一把万能钥匙锁定。因此,您只需记住一个主密钥即可解锁整个数据库。数据库文件使用目前已知…...

Android 11 中的权限更新

官网:https://developer.android.com/about/versions/11/privacy/permissions#audit-by-feature Android 11 使用户能够为位置、麦克风和摄像头指定更精细的权限。此外,系统会重置针对 Android 11 或更高版本的未使用应用程序的权限,如果应用…...

october-cms

环境准备 靶机链接:百度网盘 请输入提取码 提取码:3e4s 虚拟机网络链接模式:桥接模式 攻击机系统:kali linux 2021.1 信息收集 1.探测目标靶机ip。 2.探测靶机开放端口和服务情况。 漏洞探测 1.访问网页 2.用dirsearch扫描…...

抖音怎样报白?报白需要审核哪些资料呢

抖音怎样报白?报白需要审核哪些资料呢 抖音报白需要什么资料,翡翠原石产品如何开通报白#报白#小店报白#小店运营#抖音#抖音小店运营 文/专栏作家百收 随着抖音在国内流行起来,抖音上每天会有大量的视频更新,越来越多的年轻人也加…...

Spring中的AOP

Spring中的AOP 文章目录Spring中的AOPAOP概述相关术语总结作用AOP概述 AOP(Aspect Programming) 是一种设计思想,是面向切面编程思想 跟OOP(面向对象编程)有什么关系呢? AOP面向切面编程然后是OOP(面向对象编程)的补充和完善。…...

文件系统与动静态库的基本了解

目录文件系统与动静态库的基本了解文件系统了解Access Modify Changeinode硬链接软链接静态库与动态库概念静态库的制作使用静态库动态库的制作使用动态库总结如何制作文件系统与动静态库的基本了解 文件系统 了解Access Modify Change 当文件没有被打开时,他们存…...

netty——IO、NIO、AIO进化之路

IO、NIO、AIO进化之路BIO——同步阻塞IO伪异步阻塞IONIO——同步非阻塞IOAIO——异步IO总结本文会说明各种IO的特点、分别解决了什么样的问题做一个分析阐述,并结合Java代码例子来辅助理解,像这些的历史演进和详细的底层原理网上很多,所以我们…...

AI稳定生成图工业链路打造

前沿这篇文章会以比较轻松的方式,跟大家交流下如何控制文本生成图片的质量。要知道如何控制文本生成质量,那么我们首先需要知道我们有哪些可以控制的参数和模块。要知道我们有哪些控制的参数和模块,我们就得知道我们文本生成图片的这架机器或…...

20230220华南金牌主板u盘启动

20230220华南金牌主板u盘启动 2023/2/20 10:29 百度搜索:华南金牌主板u盘启动 https://www.zhihu.com/question/498121895?utm_id0 华南金牌主板b85u盘启动怎么设置? 华南金牌主板b85u盘启动怎么设置 海的那边 上小学后才发现还是幼儿园好混…… 华南一般是F7和F1…...

测试团队都在用哪些不错的测试用例管理平台?盘点6大主流测试管理系统

测试团队使用的主流测试用例管理平台:1.PingCode ;2.TestRail;3.Testlink;4.ZephyrJira;5.TestCenter;6.飞蛾。目前市面上的测试用例管理工具有很多,但由于针对的项目、领域、目标用户&#xff…...

linux 系统编程之线程

线程 文章目录线程1 线程概念2 NPT安装线程 man page:查看指定线程的 LWP 号:3 线程的特点4 线程共享资源5 线程非共享资源6 线程的优缺点7线程常用操作1 线程号pthread_self函数:pthread_equal函数:参考代码2 错误返回值分析参考代码3 线程的…...

从0开始学python -35

Python3 File(文件) 方法 open() 方法 Python open() 方法用于打开一个文件,并返回文件对象。 在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。 注意:使用 open() 方法一定要保证关闭文件对…...

1.14 golang中的结构体

1. 结构体 Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念。Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性。 1.1. 类型别名和自定义类型 1.1.1. 自定义类型 在Go语言中有一些基本的数据类型,如string、整…...

原创不易,坚持更难

早上CSDN发消息,今天是创作满三年的纪念日,邀请写一篇博文,谈谈感受 开博原因 2020年是一个特殊的年份,疫情刚爆发第一年,也是第一次居家办公,从过完年就一直居家办公,一直居家了38天。2020年…...

计算机网络 | 谈谈TCP的流量控制与拥塞控制

文章目录一、TCP的流量控制1、利用滑动窗口实现流量控制【⭐⭐⭐】2、如何破解【死锁】局面❓二、TCP的拥塞控制1、拥塞控制的一般原理① 解决网络拥塞的误区② 拥塞控制与流量控制的关系【重点理解✔】2、TCP的拥塞控制方法① 接收窗口【rwnd】与拥塞窗口【cwnd】② 慢开始和拥…...

ZUI 3表单组件完全指南:从基础输入到复杂验证的完整解决方案

ZUI 3表单组件完全指南:从基础输入到复杂验证的完整解决方案 【免费下载链接】zui ZUI is an HTML5 front UI framework. 项目地址: https://gitcode.com/gh_mirrors/zu/zui ZUI 3是一个全新的开源HTML5前端UI框架,提供了丰富的表单组件和完整的表…...

DolphinScheduler任务状态异常排查:从僵尸任务到数据库修复全流程

DolphinScheduler任务状态异常排查:从僵尸任务到数据库修复全流程 引言 在分布式任务调度系统中,任务状态异常是运维人员经常遇到的棘手问题。DolphinScheduler作为一款开源的分布式可视化工作流任务调度系统,其强大的功能背后也隐藏着一些状…...

【python】MacOS下永久配置pip镜像源

核心方法:修改 pip 的配置文件在 macOS 上,您需要创建或修改一个位于用户主目录下的配置文件 pip.conf。详细步骤第一步:打开终端按 Command 空格键 打开 Spotlight 搜索。输入“终端”或“Terminal”,然后按回车键打开。第二步&…...

KART-RERANK在AIGC内容审核中的应用:自动化识别与排序低质生成文本

KART-RERANK在AIGC内容审核中的应用:自动化识别与排序低质生成文本 1. 引言 现在打开任何一个内容平台,无论是文章、评论还是商品描述,你都能看到大量由AI生成的内容。这些内容来得快、数量多,但质量却参差不齐。有的写得有模有…...

Qwen3.5-9B基础教程:start.sh脚本解析+环境变量注入+PATH调试技巧

Qwen3.5-9B基础教程:start.sh脚本解析环境变量注入PATH调试技巧 1. 项目概述 Qwen3.5-9B是一个拥有90亿参数的开源大语言模型,具备强大的逻辑推理、代码生成和多轮对话能力。该模型支持多模态理解(图文输入)和长上下文处理&…...

量化交易回测工具革新:backtrader-pyqt-ui让策略开发效率提升10倍的实践指南

量化交易回测工具革新:backtrader-pyqt-ui让策略开发效率提升10倍的实践指南 【免费下载链接】backtrader-pyqt-ui 项目地址: https://gitcode.com/gh_mirrors/bac/backtrader-pyqt-ui backtrader-pyqt-ui是一款将Backtrader量化回测引擎与PyQt图形界面完美…...

k6:现代性能测试工具的新标杆

本人已经有几年不接触性能测试了,近些年一直是在从事功能和操作系统的自动化测试工作,现在回头看以前所专注的性能测试工具,感觉是有点跟不上时代了,在网上无意中发现一款比较火的工具k6,我也不知道这工具是哪年冒出来…...

Keil中内存概念:Flash、SRAM、RO、RW、ZI、.data、.bss、heap、stack、MAP文件

此文章转载于微信公众号:嵌入式电子学习,只作为笔记备忘录使用 内存属性 理解Keil MDK(或ARM编译器)中关于程序内存布局的一些基本概念(RO、RW、ZI和.data、.bss、heap、stack、Flash、SRAM)。这些概念对…...

SO(3) (本质理解)

一、SO(3) 是什么 SO(3)(Special Orthogonal Group): 几何理解(非常重要) SO(3) 表示: “刚体绕某个轴旋转一个角度” 任何旋转都可以表示为: 一个单位轴 一个角度 这就是: 轴…...

突破视频下载壁垒:yt-dlp-gui的全场景应用指南

突破视频下载壁垒:yt-dlp-gui的全场景应用指南 【免费下载链接】yt-dlp-gui Windows GUI for yt-dlp 项目地址: https://gitcode.com/gh_mirrors/yt/yt-dlp-gui 在数字化时代,视频内容已成为信息传递与知识获取的重要载体。然而,多数平…...