一、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()方法的区别相关推荐

  1. 线程run方法和start方法的区别

    区别 run() 只是一个普通的方法调用,不会开启新的线程. start() 会开启新的线程,分配新的资源.里面的变量互不影响. 实例 package multithreading;public cl ...

  2. Java并发编程—schedule方法和scheduleAtFixedRate方法的区别

    原文作者:一叶丿清风 原文地址:schedule方法和scheduleAtFixedRate方法的区别 schedule方法和scheduleAtFixedRate方法都可以实现任务的延时和不延时执行 ...

  3. 请简述一下线程的sleep()方法和yield()方法的区别?

    请简述一下线程的sleep()方法和yield()方法的区别? ①sleep()方法给其他线程机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会. yield()方法只会给相同优先级或更高优 ...

  4. flush方法和close方法的区别

    package com.learn.Demo05Writer;import java.io.FileWriter; import java.io.IOException;/*flush方法和close ...

  5. ExtJS中listener方法和handler方法的区别

    listener方法和handler方法的区别在文档中的说明的太玄乎了,看不懂 listeners监听能够对一个click Event事件添加任意多个的事件响应处理函数 而handler处理只能够通过 ...

  6. python predict_对Keras中predict()方法和predict_classes()方法的区别说明

    1 predict()方法 当使用predict()方法进行预测时,返回值是数值,表示样本属于每一个类别的概率,我们可以使用numpy.argmax()方法找到样本以最大概率所属的类别作为样本的预测标 ...

  7. java——Scanner中nextLine()方法和next()方法的区别

    遇到一个有意思的东西,在整理字符串这块知识的时候,发现我在用Scanner函数时,在字符串中加入空格,结果空格后面的东西没有输出来(/尴尬),不多说直接上代码: import java.util.Sc ...

  8. Thread类的run方法和start方法

    Thread类的run方法和start方法 start方法是Thread类中的方法,用于启动新的线程.而调用run方法时,不会启动新的线程.在调用start方法后,程序会在后台启动新的线程.然后,由这 ...

  9. dispose方法和setvisible方法的区别和使用

    dispose方法和setvisible方法的区别: dispose()撤销当前窗口,并释放当前窗口所使用的资源. setVisible()方法仅仅隐藏窗体,可设置窗口是否可见,窗口默认是不可见的. ...

  10. get方法和post方法的区别及常用的请求方式

    get方法和post方法的区别: get方法是从服务器上获取资源:post方法是向服务器传送数据: get方法参数是通过url传递的,post方法是放在request body中:GET比POST更不 ...

最新文章

  1. TVM适配NN编译Compiler缺陷
  2. 6.DeepFM: A Factorization-Machine based Neural Network for CTR Prediction论文详解和代码实现
  3. spring26-2: bean的作用域
  4. python 链表的基础概念和基础用法
  5. Azure SQL的DTU和eDTU到底是个什么鬼
  6. 宝塔面板进行ssl配置,显示待域名确认
  7. Java—多线程创建详解
  8. Integer String int 相互转化
  9. Samba和用户组综合练习
  10. 使用 pyecharts 以及matplotlib分析猫眼哪吒影评
  11. PDF编辑方法,如何裁剪PDF中的一页
  12. Flutter报setState() or markNeedsBuild() called during build.错误解决办法
  13. PX4模块设计之十二:High Resolution Timer设计
  14. 数据挖掘常用算法整理
  15. Mobento:能搜索视频中说过的话
  16. 记录一下CSR蓝牙做DFU的流程
  17. 全国大学生“高教杯”成图大赛——图错了如何修改
  18. PHP微信公众平台开发高级篇--群发接口
  19. 23个shell实用脚本
  20. 运维自动化之----ansible中play的高级用法模板(7)

热门文章

  1. android 图标的格式,Android应用图标适配
  2. html提取正文字游戏名,游戏id古诗词 用古诗词取个游戏名字
  3. ZCMU-1345: 国际象棋
  4. bitbake的原理介绍, 使用方法, 编译脚本的编写方法
  5. 移动交互提示语设计(转)
  6. linux换页符号,关于换行符:什么是回车符,换行符和换页符?
  7. 什么是计算机的用户名和密码,电脑用户名是什么意思
  8. QCC3040---UI tones module
  9. simulink 全桥逆变无控整流DC-DC电路
  10. java房屋出租预约看房系统springboot ssm带房东租客