run()方法和start()方法的区别
一、start()和run()方法的区别:
1、start方法用来启动相应的线程;
2、run方法只是thread的一个普通方法,在主线程里执行;
3、需要并行处理的代码放在run方法中,start方法启动线程后自动调用run方法;
4、run方法必须是public的访问权限,返回类型为void。
二、进一步的理解
线程的run()方法是由java虚拟机直接调用的,如果我们没有启动线程(没有调用线程的start()方法)而是在应用代码中直接调用run()方法,那么这个线程的run()方法其实运行在当前线程(即run()方法的调用方所在的线程)之中,而不是运行在其自身的线程中,从而违背了创建线程的初衷,也就是说并没有创建一个新的线程。
代码举例说明:
public class ManageThread extends Thread {//在该方法中实现线程的任务逻辑@Overridepublic void run() {//获取当前正在执行的线程名称System.out.println(Thread.currentThread().getName());}
}
public class TestDemo {public static void main(String[] args) {Thread manageThreadFirst = new ManageThread(); //创建线程(动态规划)manageThreadFirst.run(); //直接调用run()方法System.out.println(Thread.currentThread().getName());//打印当前线程的名称System.out.println("==============上方是未调用start()的打印结果");Thread manageThreadSecond = new ManageThread(); //创建线程manageThreadSecond.start(); //启动线程,start()自动调用run()}
}
运行结果:
main
main
==============上方是未调用start()的打印结果
Thread-1
通过上述运行结果,即可印证我们的结论。
run()方法和start()方法的区别相关推荐
- 线程run方法和start方法的区别
区别 run() 只是一个普通的方法调用,不会开启新的线程. start() 会开启新的线程,分配新的资源.里面的变量互不影响. 实例 package multithreading;public cl ...
- Java并发编程—schedule方法和scheduleAtFixedRate方法的区别
原文作者:一叶丿清风 原文地址:schedule方法和scheduleAtFixedRate方法的区别 schedule方法和scheduleAtFixedRate方法都可以实现任务的延时和不延时执行 ...
- 请简述一下线程的sleep()方法和yield()方法的区别?
请简述一下线程的sleep()方法和yield()方法的区别? ①sleep()方法给其他线程机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会. yield()方法只会给相同优先级或更高优 ...
- flush方法和close方法的区别
package com.learn.Demo05Writer;import java.io.FileWriter; import java.io.IOException;/*flush方法和close ...
- ExtJS中listener方法和handler方法的区别
listener方法和handler方法的区别在文档中的说明的太玄乎了,看不懂 listeners监听能够对一个click Event事件添加任意多个的事件响应处理函数 而handler处理只能够通过 ...
- python predict_对Keras中predict()方法和predict_classes()方法的区别说明
1 predict()方法 当使用predict()方法进行预测时,返回值是数值,表示样本属于每一个类别的概率,我们可以使用numpy.argmax()方法找到样本以最大概率所属的类别作为样本的预测标 ...
- java——Scanner中nextLine()方法和next()方法的区别
遇到一个有意思的东西,在整理字符串这块知识的时候,发现我在用Scanner函数时,在字符串中加入空格,结果空格后面的东西没有输出来(/尴尬),不多说直接上代码: import java.util.Sc ...
- Thread类的run方法和start方法
Thread类的run方法和start方法 start方法是Thread类中的方法,用于启动新的线程.而调用run方法时,不会启动新的线程.在调用start方法后,程序会在后台启动新的线程.然后,由这 ...
- dispose方法和setvisible方法的区别和使用
dispose方法和setvisible方法的区别: dispose()撤销当前窗口,并释放当前窗口所使用的资源. setVisible()方法仅仅隐藏窗体,可设置窗口是否可见,窗口默认是不可见的. ...
- get方法和post方法的区别及常用的请求方式
get方法和post方法的区别: get方法是从服务器上获取资源:post方法是向服务器传送数据: get方法参数是通过url传递的,post方法是放在request body中:GET比POST更不 ...
最新文章
- TVM适配NN编译Compiler缺陷
- 6.DeepFM: A Factorization-Machine based Neural Network for CTR Prediction论文详解和代码实现
- spring26-2: bean的作用域
- python 链表的基础概念和基础用法
- Azure SQL的DTU和eDTU到底是个什么鬼
- 宝塔面板进行ssl配置,显示待域名确认
- Java—多线程创建详解
- Integer String int 相互转化
- Samba和用户组综合练习
- 使用 pyecharts 以及matplotlib分析猫眼哪吒影评
- PDF编辑方法,如何裁剪PDF中的一页
- Flutter报setState() or markNeedsBuild() called during build.错误解决办法
- PX4模块设计之十二:High Resolution Timer设计
- 数据挖掘常用算法整理
- Mobento:能搜索视频中说过的话
- 记录一下CSR蓝牙做DFU的流程
- 全国大学生“高教杯”成图大赛——图错了如何修改
- PHP微信公众平台开发高级篇--群发接口
- 23个shell实用脚本
- 运维自动化之----ansible中play的高级用法模板(7)
热门文章
- android 图标的格式,Android应用图标适配
- html提取正文字游戏名,游戏id古诗词 用古诗词取个游戏名字
- ZCMU-1345: 国际象棋
- bitbake的原理介绍, 使用方法, 编译脚本的编写方法
- 移动交互提示语设计(转)
- linux换页符号,关于换行符:什么是回车符,换行符和换页符?
- 什么是计算机的用户名和密码,电脑用户名是什么意思
- QCC3040---UI tones module
- simulink 全桥逆变无控整流DC-DC电路
- java房屋出租预约看房系统springboot ssm带房东租客