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.

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 start()方法和run()方法的区别

    Thread start() 方法 ,是一个线程开始的方法 Thread run() 方法 ,就是一个普通的方法,可以理解为main方法里面的一个普通的方法 下面写一个demo 理解下 Thread ...

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

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

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

    多线程中  start()和run()方法的区别: Java线程一直是一个比较容易困扰的地方,首先,我们来认识下怎样生存线程. 认识 Thread 和Runnable java中实现多线程有两种途径: ...

  7. start()方法和run()方法区别与多线程抢占式运行原理

    目录 start()与run()方法区别 多线程抢占式运行原理 start()与run()方法区别 我们通过一个例子来进行总结,我们写一个利用Thread创建的简单的多线程例子,然后分别执行start ...

  8. java线程开启不了_Java中多线程启动,为什么调用的是start方法,而不是run方法?...

    前言 大年初二,大家新年快乐,我又开始码字了.写这篇文章,源于在家和基友交流的时候,基友问到了,我猛然发现还真是这么回事,多线程启动调用的都是start,那么为什么没人掉用run呢?于是打开我的ide ...

  9. Java中多线程启动,为什么调用的是start方法,而不是run方法?

    前言 大年初二,大家新年快乐,我又开始码字了.写这篇文章,源于在家和基友交流的时候,基友问到了,我猛然发现还真是这么回事,多线程启动调用的都是start,那么为什么没人掉用run呢?于是打开我的ide ...

  10. java线程 yield_Java线程中yield与join方法的区别

    长期以来,多线程问题颇为受到面试官的青睐.虽然我个人认为我们当中很少有人能真正获得机会开发复杂的多线程应用(在过去的七年中,我得到了一个机会),但是理解多线程对增加你的信心很有用.之前,我讨论了一个w ...

最新文章

  1. Linux 系统调用(二)——使用内核模块添加系统调用(无需编译内核)
  2. android studio引用module出的错:Unable to resolve dependency for‘:app@debug/........
  3. HTTP:HTTP的server and client详细攻略
  4. 【C/C++】排序算法
  5. mysql 查询缓存
  6. list mybatis批量保存_springboot2.x基础教程:集成mybatis最佳实践
  7. 华为确定2019年目标:超三星成全球最大智能手机供应商
  8. 吴恩达机器学习之线性逻辑回归实现部分
  9. 软件设计师23-存储器系统02
  10. phpMyAdmin安装配置方法全过程,及问题解决
  11. 【图解】QT 布局、 sizeHint和SizePolicy概念
  12. 初中信息技术考试:Python试题及答案
  13. python timepicker_Android之日期时间选择控件DatePicker和TimePicker
  14. 虚拟光驱传文件到服务器,虚拟光驱服务器
  15. linux chm 阅读器,linux下最好的chm阅读器KchmViewer,安装使用/与oklular,xCHM,gnochm简单比较...
  16. oracle 币种符号,Oracle用户密码使用特殊符号,例如(AND)、$(Dollar)、#(Pound)、*(Star)等...
  17. php段错误coredumped,CentOS yum 段错误 (core dumped)解决方法
  18. 新增诊所19804家 | 私营诊所要如何主动?才能被患者选择
  19. 【JavaScript】DOM笔记(随缘更新ing)
  20. 使用jdk查看jks文件信息

热门文章

  1. 零基础小白必须学习的,3Dmax快捷键大全!你都会吗?
  2. 一文看懂外汇风险准备金率调整为 20%的含义
  3. DSP程序中常出现的EINT、DINT、ERTM、DRTM、EALLOW、EDIS的理解
  4. 纹理(讲得比较详细的文章)
  5. 043 Tayler泰勒公式证明
  6. pyautogui图形识别-confidence,grayscale
  7. fastapi+tortoise单元测试
  8. 软件测试工程师需要具备哪些能力?
  9. 硕飞烧录器、卓晶微烧录机使用
  10. python中的opencv读取数字_用python和OpenCV从图像中提取数字