线程的 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. 2018AI最佳应用回顾
  2. Java dispose()函数窗口无法关闭
  3. linux /etc/rc.d/目录的详解
  4. android 布局之scrollview
  5. [转载]Visual Studio 2010敏捷利剑:详解Scrum
  6. 《SpringCloud超级入门》Spring Boot Starter的介绍及使用《七》
  7. (49)System Verilog字符串string详解
  8. 【JAVA SE】第六章 面向对象、对象和类以及封装
  9. python判断list集合中是否包含某个元素_python怎样判断list是否包含某个元素
  10. 什么是软件测试中的黑天鹅
  11. mysql rpm安装报错_mysql5.7 rpm包完整安装教程,解决网上更改数据文件就启动报错的故障。...
  12. 05《基于深度卷积神经网络的车型识别研究》学习总结
  13. 三维点云处理(深度学习方法)综述
  14. 个人成长通关之路:四仁五德六读书
  15. 定量分析双花(双重支付)问题
  16. Telephone--短信发送/接收流程
  17. 计算机硬盘满了怎么解决,我的128G笔记本电脑硬盘又满了,怎么办?
  18. php中base64加密的应用场景
  19. 花匠(最长波浪子序列——DP + 权值线段树)
  20. 前端upload标签使用方法

热门文章

  1. 《英雄联盟》——召唤师峡谷模式 游戏设计元素分析
  2. html a标签属性 rel='nofollow'
  3. Java面试官:兄弟,你确定double精度比float低吗?
  4. python3 -c ‘import pty;pty.spawn(“/bin/bash“)‘升级切换交互式shell
  5. 新年优惠不断档,邀请好友还能获得腾讯视频会员及Q币!
  6. # SOM-算法原理
  7. 未来哪些行业值得加入?
  8. 宗镜录略讲——南怀瑾老师——系列1
  9. minu-ui 的 mt-datetime-picker 组件在部分安卓机型上不显示日期只有取消和确认按钮
  10. 最全的脱壳,反编译 ,汇编工具