多线程中  start()和run()方法的区别:

Java线程一直是一个比较容易困扰的地方,首先,我们来认识下怎样生存线程。

认识 Thread 和Runnable

java中实现多线程有两种途径:继承Thread类或者实现Runnable接口。Runnable是接口,建议用接口的方式生成线程,

因为接口可以实现多继承,况且Runnable只有一个run方法,很适合实现。

在使用Thread的时候只需继承Thread,并且new一个实例出来,调用 start()方法即可以启动一个线程。

Thread Test = new Thread();

Test.start();

在使用Runnable的时候需要先new一个实现Runnable的实例,之后启动Thread即可。

Test impelements Runnable;

Test t = new Test();

Thread test = new Thread(t);

test.start();

总结:Thread和Runnable是实现java多线程的2种方式,runable是接口,thread是类,建议使用runable实现 java多线程,

不管如何,最终都需要通过thread.start()来使线程处于可运行状态。

下面我们来谈谈本文重点,start()和run()方法的区别

1) start:

用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。

通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。

2) run:

run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。

总结:调用start方法方可启动线程,而run方法只是thread的一个普通方法调用,还是在主线程里执行。

这两个方法应该都比较熟悉,把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法,

这是由jvm的内存机制规定的。并且run()方法必须是public访问权限,返回值类型为void.

参考博文:https://blog.csdn.net/dada360778512/article/details/6965790

多线程中 start()和run()方法的区别相关推荐

  1. start() 跟 run() 方法的区别和联系

    这里还有个知识点是 start() 跟 run() 方法的区别和联系. 直接调用 start() 方法,此时线程处于一个就绪(可运行)的状态,但是并没有真正的运行.而是得到CPU 的时间片后,开始执行 ...

  2. run在java_Java语言start和run方法的区别

    Java语言start和run方法的区别 导语:Thread类定义了一个功能,用于存储线程要运行的代码,该存储功能就是run方法.那么它和start方法有什么不同呢?让我们了解一下吧! 调用start ...

  3. java Thread的start和run方法的区别

    一.认识Thread的 start() 和 run() 概述: t.start()会导致run()方法被调用,run()方法中的内容称为线程体,它就是这个线程需要执行的工作. 用start()来启动线 ...

  4. 多线程中Thread的join方法

    多线程中Thread的join方法 join简介 join方法是Thread类中的一个方法,该方法的定义是等待该线程执行直到终止.其实就说join方法将挂起调用线程的执行,直到被调用的对象完成它的执行 ...

  5. java foward_java 中sendredirect()和forward()方法的区别

    HttpServletResponse.sendRedirect与RequestDispatcher.forward方法都可以实现获取相应URL资源. sendRedirect实现请求重定向,forw ...

  6. java sendredirect报错_java 中sendredirect()和forward()方法的区别

    HttpServletResponse.sendRedirect与RequestDispatcher.forward方法都可以实现获取相应URL资源. sendRedirect实现请求重定向,forw ...

  7. HTTP协议中GET和POST方法的区别

    本文详细对比了HTTP协议中GET和POST方法的区别,部分内容可能有误,读者请自行甄别. 转自博客https://sunshinevvv.coding.me/blog/2017/02/09/Http ...

  8. python requests中content与text方法的区别

    python requests中content与text方法的区别 目录 python requests中content与text方法的区别 目录 requests的作用 response的常用方法: ...

  9. PHP中静态方法和实例化方法的区别

    文章来自:PHP中静态方法和实例化方法的区别 在PHP中类为什么要使用静态方法,有什么好处 不需要实例化?? 可以提高运行效率?? 这是一个经常被时时提出来的问题,很多时候我们以为理解了.懂了,但深究 ...

  10. php的mktime,php中time()和mktime()方法的区别

    time()函数是返回当前时间的.而mktime()函数的主要功能不是返回当前时间,而是格式化时间.虽然单独写mktime()而不加任何参数如:echo mktime()和echo time()的效果 ...

最新文章

  1. Openoffice 安装与配置
  2. NET(C#)连接各类数据库-集锦
  3. 小程序 iphone和安卓_如何阻止iPhone和iPad应用程序要求评级
  4. TVM:通过Python接口(AutoTVM)来编译和优化模型
  5. 使用python打印数字三角形_11届省赛python试题 H: 数字三角形
  6. Android P对dtbo分区
  7. MS SQL Server存储过程的优点有哪些呢?
  8. 微信公共开发人员文档 阅读笔记
  9. 如何将div高度填满剩余高度
  10. Ubuntu(Mint)下搭建SVN服务器
  11. Java网络编程——客户端Socket
  12. 未安装任何音频输出设备
  13. 一文学会SPSS软件
  14. 高级英语(张汉熙版)第一册学习笔记(原文及全文翻译)——2 - Hiroshima-The “Liveliest“ City in Japan (excerpts)(广岛——日本“最有活力”的城市)
  15. 微服务的数据聚合Join
  16. dell服务器配置信息,DELL服务器配置(710)
  17. 同位素的研究方法和技术
  18. 人脸识别实践(2) - 人脸识别系统展示
  19. html5倒计时秒杀怎么做,如何让秒杀、活动倒计时更精确?
  20. matlab三个商人三个随从,数学建模 商人过河

热门文章

  1. filterreader_Java FilterReader markSupported()方法与示例
  2. python日历模块_Python日历模块| setfirstweekday()方法与示例
  3. Python 爬取淘宝商品信息栏目
  4. Ray.tune可视化调整超参数Tensorflow 2.0
  5. 重构手法——提炼函数、搬移函数、以多态取代条件表达式
  6. 矩阵连乘问题的算法分析
  7. unity塔防游戏怪物转向_红包版塔防游戏合集-可以赚钱领红包的塔防游戏-无广告塔防游戏红包版大全...
  8. ipython怎么安装_ipython的两种安装方式
  9. python输出文本内容_python 打印文件里的内容
  10. Win7电脑设置定时关机的操作方法