线程的 run() 和 start() 有什么区别?

  • 调用 start() 方法是用来启动线程的,轮到该线程执行时,会自动调用 run();直接调用 run() 方法,无法达到启动多线程的目的,相当于主线程线性执行 Thread 对象的 run() 方法。
  • 一个线程对线的 start() 方法只能调用一次,多次调用会抛出 java.lang.IllegalThreadStateException 异常;run() 方法没有限制。

测试 run() 方法

public class TestThreadRunStart {public static void main(String[] args) {Thread t = new Thread(){@Overridepublic void run() {//休眠3秒try {Thread.sleep(3000);System.out.println("休眠3秒");} catch (InterruptedException e) {e.printStackTrace();}System.out.println("Thread running...");}};testRun(t);
//      testStart(t);}private static void testRun(Thread t) {t.run();//休眠1秒try {Thread.sleep(1000);System.out.println("休眠1秒");} catch (InterruptedException e) {e.printStackTrace();}}private static void testStart(Thread t) {t.start();//休眠1秒try {Thread.sleep(1000);System.out.println("休眠1秒");} catch (InterruptedException e) {e.printStackTrace();}}
休眠3秒
Thread running...
休眠1秒

测试 start() 方法

public static void main(String[] args) {Thread t = new Thread(){@Overridepublic void run() {//休眠3秒try {Thread.sleep(3000);System.out.println("休眠3秒");} catch (InterruptedException e) {e.printStackTrace();}System.out.println("Thread running...");}};//      testRun(t);testStart(t);}
休眠1秒
休眠3秒
Thread running...

两次的执行结果,可以看出 run() 和 start() 方法的区别。


【Java面试题与答案】整理推荐

  • 基础与语法
  • 集合
  • 网络编程
  • 并发编程
  • Web
  • 安全
  • 设计模式
  • 框架
  • 算法与数据结构
  • 异常
  • 文件解析与生成
  • Linux
  • MySQL
  • Oracle
  • Redis
  • Dubbo

线程的 run() 和 start() 有什么区别?相关推荐

  1. 线程的 run()和 start()有什么区别?

    线程状态之间的转换:https://www.cnblogs.com/zhaosq/p/10564698.html 1.start(): 用start方法来启动线程,真正实现了多线程运行,这时无需等待r ...

  2. 多线程面试题之启动一个线程是run()还是start()?他们有什么区别

    3.启动一个线程是run()还是start()?他们有什么区别启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行.这并不意味着线程就会立即运 ...

  3. 多线程中 start()和run()方法的区别

    多线程中  start()和run()方法的区别: Java线程一直是一个比较容易困扰的地方,首先,我们来认识下怎样生存线程. 认识 Thread 和Runnable java中实现多线程有两种途径: ...

  4. C# Task.Run 和 Task.Factory.StartNew 区别

    有小伙伴问我,为什么不推荐他使用 Task.Factory.StartNew ,因为 Task.Run 是比较新的方法. 本文告诉大家 Task.Run 和 Task.Factory.StartNew ...

  5. docker run与docker start的区别?

    docker run相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start). docker start的作用是:重新启动已 ...

  6. java 多线程 start,Java 线程的run()和start()

    Java 线程的run()和start() 一个常见的问题:为什么启动线程是调用start()方法,而不是调用run()方法呢? 答案: 每个线程都在单独的调用堆栈中启动. 从主线程调用run()方法 ...

  7. 线程中断的三个方法的区别(interrupt/isInterrupted/interrupted)

    线程中断的三个方法的区别(interrupt/isInterrupted/interrupted)-总结自Java编程之美 方法定义 void interrupt():中断调用该方法的实例线程对象.当 ...

  8. yarn build 和 npm run build打包有什么区别

    yarn build 和 npm run build打包有什么区别 结论: 没区别,yarn build === yarn run build === npm run build

  9. 线程与进程之间的关系和区别

    线程共享的环境包括:进程代码段,进程的公有数据(利用这些数据,线程很容易实现相互间的通讯),进程打开的文件描述符,信号的处理器进程的当前目录和进程用户ID与进程组ID. 进程拥有这许多共性的同时,还拥 ...

最新文章

  1. java多线程-死锁的一些问题
  2. python真的有用吗-你真的认为python有那么好吗
  3. Jsoup解析的例子 之 选择器
  4. 跟我一起学.NetCore之文件系统应用及核心浅析
  5. ELMo代码详解(一):数据准备
  6. python怎么在运行中查看执行状态,Python程序运行时查看对象状态怎样设计才能实现...
  7. 计算机系统-电路设计02-与门电路
  8. 深度学习:词嵌入Embedding
  9. atitit.session的原理以及设计 java php实现的异同
  10. linux手机刷机包制作工具_安卓10刷机包
  11. 信息资源管理——基础
  12. 第9周作业-成本计划
  13. 电气潮流运算Matlab怎么编程,基于Matlab的电力系统潮流编程计算
  14. Caused by: java.lang.NumberFormatException: For input string: “?2130969371“
  15. Effective C++ XMind读书笔记
  16. 大数据冲击下图书出版编辑转型策略探析(非原创)
  17. android 组件导出,阳光沙滩-android组件化项目,build生成的文件重复的情况
  18. 使用OGG/Kettle实现Oracle到MySQL数据平滑迁移
  19. [简单逻辑学]逻辑学的基本原理——区分原因
  20. 做数据分析有前景吗?

热门文章

  1. 随机生成学号和成绩并排序
  2. 微机原理与接口技术(第6版)第六章习题1、3、10、13
  3. 程序员斗图专用表情包,做技术群里最靓的仔!
  4. C语言--闰年判断程序
  5. pip install --pre -U uiautomator2报错一直安装失败
  6. 学会后不用担心不会剪辑了,手把手教你视频剪辑,不用真人露脸
  7. 高赞的6款办公神器,好用到飞起
  8. MCDF中arbiter的轮询机制
  9. Vue脚手架安装 与 Vue项目创建运行、vue项目迁移后运行失败问题
  10. python根据url获得m3u8_python爬取m3u8连接的视频