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()则是定义了线程要执行的任务。在实际编程中,应当正确使用这两个方法,以确保多线程程序的正确和高效运行。

目录
相关文章
|
Java API Maven
敏感数据的保护伞——SpringBoot Jasypt加密库的使用
我们经常会在yml配置文件中存放一些敏感数据,比如数据库的用户名、密码,第三方应用的秘钥等等。这些信息直接以明文形式展示在文件中,无疑是存在较大的安全隐患的,所以今天这篇文章,我会借助jasypt实现yml文件中敏感信息的加密处理。
4478 1
敏感数据的保护伞——SpringBoot Jasypt加密库的使用
并发与并行的区别(详细介绍)
并发与并行的区别(详细介绍)
10505 0
|
SQL XML Java
解决关于在idea使用Mybatis时, 编写xml的动态sql语句背景高亮不舒服问题
解决关于在idea使用Mybatis时, 编写xml的动态sql语句背景高亮不舒服问题
2785 0
|
3月前
|
关系型数据库 MySQL Java
MySQL 分库分表 + 平滑扩容方案 (秒懂+史上最全)
MySQL 分库分表 + 平滑扩容方案 (秒懂+史上最全)
|
12月前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
|
安全 Java
【JAVA】线程的run()和start()有什么区别?
【JAVA】线程的run()和start()有什么区别?
|
SQL 关系型数据库 MySQL
Mysql 开启慢日志查询及查看慢日志 sql
Mysql 开启慢日志查询及查看慢日志 sql
338 0
|
10月前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
1488 15
|
存储 NoSQL 数据库
知识图谱之图数据库如何选型:知识图谱存储与图数据库总结、主流图数据库对比(JanusGraph、HugeGraph、Neo4j、Dgraph、NebulaGraph、Tugrapg)
知识图谱之图数据库如何选型:知识图谱存储与图数据库总结、主流图数据库对比(JanusGraph、HugeGraph、Neo4j、Dgraph、NebulaGraph、Tugrapg)
知识图谱之图数据库如何选型:知识图谱存储与图数据库总结、主流图数据库对比(JanusGraph、HugeGraph、Neo4j、Dgraph、NebulaGraph、Tugrapg)
|
调度 开发者 UED
Kotlin 中的协程是什么?
【8月更文挑战第31天】
1253 0