线程的 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. 进程拥有这许多共性的同时,还拥 ...
最新文章
- 2018AI最佳应用回顾
- Java dispose()函数窗口无法关闭
- linux /etc/rc.d/目录的详解
- android 布局之scrollview
- [转载]Visual Studio 2010敏捷利剑:详解Scrum
- 《SpringCloud超级入门》Spring Boot Starter的介绍及使用《七》
- (49)System Verilog字符串string详解
- 【JAVA SE】第六章 面向对象、对象和类以及封装
- python判断list集合中是否包含某个元素_python怎样判断list是否包含某个元素
- 什么是软件测试中的黑天鹅
- mysql rpm安装报错_mysql5.7 rpm包完整安装教程,解决网上更改数据文件就启动报错的故障。...
- 05《基于深度卷积神经网络的车型识别研究》学习总结
- 三维点云处理(深度学习方法)综述
- 个人成长通关之路:四仁五德六读书
- 定量分析双花(双重支付)问题
- Telephone--短信发送/接收流程
- 计算机硬盘满了怎么解决,我的128G笔记本电脑硬盘又满了,怎么办?
- php中base64加密的应用场景
- 花匠(最长波浪子序列——DP + 权值线段树)
- 前端upload标签使用方法
热门文章
- 《英雄联盟》——召唤师峡谷模式 游戏设计元素分析
- html a标签属性 rel='nofollow'
- Java面试官:兄弟,你确定double精度比float低吗?
- python3 -c ‘import pty;pty.spawn(“/bin/bash“)‘升级切换交互式shell
- 新年优惠不断档,邀请好友还能获得腾讯视频会员及Q币!
- # SOM-算法原理
- 未来哪些行业值得加入?
- 宗镜录略讲——南怀瑾老师——系列1
- minu-ui 的 mt-datetime-picker 组件在部分安卓机型上不显示日期只有取消和确认按钮
- 最全的脱壳,反编译 ,汇编工具