Thread 类中的start() 和 run() 方法有什么区别

简介: 【8月更文挑战第9天】Thread 类中的start() 和 run() 方法有什么区别

在Java多线程编程中,Thread类是创建和管理线程的核心。关于Thread类中的start()run()方法,它们在目的、执行方式以及线程状态影响等方面存在明显的区别,具体分析如下:

  1. 目的

    • start():用于启动一个新的执行线程。
    • run():定义了线程的具体执行任务。
  2. 执行方式

    • start():当调用start()方法时,系统会为这个线程分配必要的资源并创建一个新的调用栈,然后由JVM将线程的run()方法置于这个调用栈中,在新线程中异步执行。
    • run():直接调用run()方法,其实只是在当前线程同步执行这个方法体中的代码,并不会启动新线程。
  3. 线程状态影响

    • start():调用后线程从NEW状态变为RUNNABLE状态,准备执行。
    • run():不会改变线程的状态。
  4. 使用限制

    • start():只能对一个线程调用一次,再次调用会导致IllegalThreadStateException异常。
    • run():可以被多次调用,但在多线程编程中通常只作为普通方法使用。
  5. 异步同步

    • start():异步执行,主线程不需要等待这个新线程完成就会继续自己的任务。
    • run():同步执行,调用它的线程会阻塞直到run()方法执行完毕。

总的来说,start()run()方法在功能上有明显的区别。start()是用来启动新线程的,而run()则是定义了线程要执行的任务。在实际编程中,应当正确使用这两个方法,以确保多线程程序的正确和高效运行。

目录
相关文章
|
Arthas 监控 Java
Java 诊断利器 Arthas使用
Java 诊断利器 Arthas使用
5003 0
|
6月前
|
机器学习/深度学习 人工智能 前端开发
终端里的 AI 编程助手:OpenCode 使用指南
OpenCode 是开源的终端 AI 编码助手,支持 Claude、GPT-4 等模型,可在命令行完成代码编写、Bug 修复、项目重构。提供原生终端界面和上下文感知能力,适合全栈开发者和终端用户使用。
50461 11
|
10月前
|
关系型数据库 MySQL Java
MySQL 分库分表 + 平滑扩容方案 (秒懂+史上最全)
MySQL 分库分表 + 平滑扩容方案 (秒懂+史上最全)
|
安全 Java
【JAVA】线程的run()和start()有什么区别?
【JAVA】线程的run()和start()有什么区别?
|
存储 安全 Java
深入理解Java内存模型(JMM)与虚拟机的内存结构(JVM)
深入理解Java内存模型(JMM)与虚拟机的内存结构(JVM)
|
负载均衡 监控 Java
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
31868 8
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
|
存储 Web App开发 安全
如何防范 CSRF 攻击
CSRF(跨站请求伪造)攻击是一种常见的安全威胁。防范措施包括:使用Anti-CSRF Token、检查HTTP Referer、限制Cookie作用域、采用双重提交Cookie机制等,确保请求的合法性与安全性。
Thread 类中的 start () 和 run () 方法的区别
Thread 类中的 start () 和 run () 方法的区别
197 0
|
消息中间件 存储 NoSQL
【2021年遇到最头疼的Bug】【Alibaba中间件技术系列】「RocketMQ技术专题」Broker配置介绍及发送流程、异常(XX Busy)问题分析总结
【2021年遇到最头疼的Bug】【Alibaba中间件技术系列】「RocketMQ技术专题」Broker配置介绍及发送流程、异常(XX Busy)问题分析总结
1389 113
【2021年遇到最头疼的Bug】【Alibaba中间件技术系列】「RocketMQ技术专题」Broker配置介绍及发送流程、异常(XX Busy)问题分析总结