线程的 run() 和 start() 有什么区别?
线程的 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() 有什么区别?相关推荐
- 线程的 run()和 start()有什么区别?
线程状态之间的转换:https://www.cnblogs.com/zhaosq/p/10564698.html 1.start(): 用start方法来启动线程,真正实现了多线程运行,这时无需等待r ...
- 多线程面试题之启动一个线程是run()还是start()?他们有什么区别
3.启动一个线程是run()还是start()?他们有什么区别启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行.这并不意味着线程就会立即运 ...
- 多线程中 start()和run()方法的区别
多线程中 start()和run()方法的区别: Java线程一直是一个比较容易困扰的地方,首先,我们来认识下怎样生存线程. 认识 Thread 和Runnable java中实现多线程有两种途径: ...
- C# Task.Run 和 Task.Factory.StartNew 区别
有小伙伴问我,为什么不推荐他使用 Task.Factory.StartNew ,因为 Task.Run 是比较新的方法. 本文告诉大家 Task.Run 和 Task.Factory.StartNew ...
- docker run与docker start的区别?
docker run相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start). docker start的作用是:重新启动已 ...
- java 多线程 start,Java 线程的run()和start()
Java 线程的run()和start() 一个常见的问题:为什么启动线程是调用start()方法,而不是调用run()方法呢? 答案: 每个线程都在单独的调用堆栈中启动. 从主线程调用run()方法 ...
- 线程中断的三个方法的区别(interrupt/isInterrupted/interrupted)
线程中断的三个方法的区别(interrupt/isInterrupted/interrupted)-总结自Java编程之美 方法定义 void interrupt():中断调用该方法的实例线程对象.当 ...
- yarn build 和 npm run build打包有什么区别
yarn build 和 npm run build打包有什么区别 结论: 没区别,yarn build === yarn run build === npm run build
- 线程与进程之间的关系和区别
线程共享的环境包括:进程代码段,进程的公有数据(利用这些数据,线程很容易实现相互间的通讯),进程打开的文件描述符,信号的处理器进程的当前目录和进程用户ID与进程组ID. 进程拥有这许多共性的同时,还拥 ...
最新文章
- java多线程-死锁的一些问题
- python真的有用吗-你真的认为python有那么好吗
- Jsoup解析的例子 之 选择器
- 跟我一起学.NetCore之文件系统应用及核心浅析
- ELMo代码详解(一):数据准备
- python怎么在运行中查看执行状态,Python程序运行时查看对象状态怎样设计才能实现...
- 计算机系统-电路设计02-与门电路
- 深度学习:词嵌入Embedding
- atitit.session的原理以及设计 java php实现的异同
- linux手机刷机包制作工具_安卓10刷机包
- 信息资源管理——基础
- 第9周作业-成本计划
- 电气潮流运算Matlab怎么编程,基于Matlab的电力系统潮流编程计算
- Caused by: java.lang.NumberFormatException: For input string: “?2130969371“
- Effective C++ XMind读书笔记
- 大数据冲击下图书出版编辑转型策略探析(非原创)
- android 组件导出,阳光沙滩-android组件化项目,build生成的文件重复的情况
- 使用OGG/Kettle实现Oracle到MySQL数据平滑迁移
- [简单逻辑学]逻辑学的基本原理——区分原因
- 做数据分析有前景吗?