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

问:Java线程为不直接run(),而是要先Start()?

在Java中,start()方法和run()方法在多线程编程中具有特定的角色和用途。理解它们的区别对于掌握多线程编程至关重要。

start() 方法

  1. 定义start()Thread 类的一个方法。
  2. 作用:当你调用一个 Thread 对象的 start() 方法时,Java 虚拟机会为该线程创建一个新的调用栈,然后在新线程中调用该线程的 run() 方法。这意味着 run() 方法是在一个新的、独立的线程中执行的。
  3. 线程调度:调用 start() 后,线程何时真正开始执行是由操作系统的线程调度器决定的。

run() 方法

  1. 定义run()Runnable 接口中的一个抽象方法,任何实现了 Runnable 接口的类都必须提供这个方法的实现。Thread 类也实现了 Runnable 接口,并提供了默认的 run() 方法实现(可以重写)。
  2. 作用run() 方法包含了线程要执行的代码。当 start() 方法被调用后,新线程会自动调用 run() 方法。

为什么调用 start() 会执行 run()

  • 内部机制start() 方法的内部实现最终会调用线程的 run() 方法,但这是在新的调用栈和上下文中进行的。这是 Java 线程机制的核心,确保多线程的并发执行。

为什么不能直接调用 run()

  1. 不会启动新线程:如果你直接调用 run() 方法,它仅仅是一个普通的方法调用,会在当前线程的调用栈中同步执行,并不会启动一个新的线程。
  2. 并发性丧失:直接调用 run() 无法实现多线程的并发执行,代码会按顺序在当前线程中执行完毕,无法达到同时执行多个任务的目的。

示例

class MyThread extends Thread {@Overridepublic void run() {System.out.println("Run method is executing");}public static void main(String[] args) {MyThread myThread = new MyThread();// 正确的方式:启动新线程,并调用 run()myThread.start();// 错误的方式:直接在当前线程中调用 run(),不会启动新线程// myThread.run();}
}

在上面的示例中,调用 myThread.start() 会启动一个新线程,并在该线程中执行 run() 方法的内容。而调用 myThread.run() 只是在主线程中同步执行 run() 方法,并不会启动新线程。

结语

  • start() 方法:用于启动一个新线程,并在该线程中调用 run() 方法。
  • run() 方法:定义了线程要执行的代码,但不能直接调用它来启动新线程。

http://www.mrgr.cn/news/35603.html

相关文章:

  • service 命令:管理系统服务
  • 数据结构 ——— 数组 nums 包含了从 0 到 n 的所有整数,但是其中缺失了一个,请编写代码找出缺失的整数,并且在O(N)时间内完成
  • 【C++前缀和 状态压缩】1177. 构建回文串检测|1848
  • 车辆识别数据集,图片数量20500,模型已训练200轮
  • C语言 | Leetcode C语言题解之第435题无重叠区间
  • TCP/IP 协议栈
  • 使用TensorFlow实现一个简单的神经网络:从构建到训练
  • 240924-通过服务器代理ip地址及port端口wget等下载文件
  • RT-DETR改进策略:BackBone改进|PoolFormer赋能RT-DETR,视觉检测性能显著提升的创新尝试
  • 在Java中,关于final、static关键字与方法的重写和继承【易错点】
  • 点亮城市安全:高科技助力精准定位路灯漏电‘隐形杀手
  • 2024年CSP-J认证 CCF信息学奥赛C++ 中小学初级组 第一轮真题-阅读程序题解析
  • 实战OpenCV之图像滤波
  • 构建预测睡眠质量模型_相关性分析,多变量分析和聚类分析
  • Cloudflare为网站添加AI审计 可检查AI爬虫何时抓取和抓取频次以及直接屏蔽爬虫
  • 从准备面试八股文,感悟到技术的本质
  • GNU链接器(LD):存储命令(MEMORY)用法及实例解析
  • 公安局软件管理平台建设方案和必要性,论文-3-———未来之窗行业应用跨平台架构
  • Python | Leetcode Python题解之第435题无重叠区间
  • LeetCode从入门到超凡(三)回溯算法