多线程执行时为什么调用的是start()方法而不是run()方法

标签: 多线程 线程 run start cpu
7408人阅读 评论(2) 收藏 举报
分类:

Thead类中start()方法和run()方法的区别
start()用来启动一个线程,当调用start()方法时,系统才会开启一个线程,通过Thead类中start()方法来启动的线程处于就绪状态(可运行状态),此时并没有运行,一旦得到CPU时间片,就自动开始执行run()方法。此时不需要等待run()方法执行完也可以继续执行下面的代码,所以也由此看出run()方法并没有实现多线程。
run()方法是在本线程里的,只是线程里的一个函数,而不是多线程的。如果直接调用run(),其实就相当于是调用了一个普通函数而已,直接待用run()方法必须等待run()方法执行完毕才能执行下面的代码,所以执行路径还是只有一条,根本就没有线程的特征,所以在多线程执行时要使用start()方法而不是run()方法。

查看评论

为什么我们调用start()方法时会执行run()方法,为什么我们不能直接调用run()方法?

start() 创建新进程 run() 没有
  • xjgd9900
  • xjgd9900
  • 2017-05-31 20:26:10
  • 1138

多线程中调用run()方法和start()方法的简单区别

比如    (1) Thread t1=new Thread(); t1.run(); 和 (2) Thread t2=new Thread(); t2.star...
  • lihong1191
  • lihong1191
  • 2016-04-30 22:15:29
  • 4311

多线程:创建Thread为什么要调用start启动,而不能直接调用run方法

最近在学习Android Service时遇到这样多线程问题。     start()方法启动线程后,整个线程处于就绪状态,等待虚拟机调度, 然后通过此Thread类调用方法run()来完成其运...
  • TTchengcheng
  • TTchengcheng
  • 2017-10-05 11:47:52
  • 894

Thread直接调用run()和start()方法的区别

Thread类中run()和start()方法的区别如下:         run()方法:在本线程内调用该Runnable对象的run()方法,可以重复多次调用;         start()...
  • chlhp
  • chlhp
  • 2011-08-06 22:47:08
  • 7002

线程中run()和start()的区别

创建一个线程  Thread t1 = new Thread() t1.run();  只是调用了一个普通方法,并没有启动另一个线程,程序还是会按照顺序执行相应的代码。 t1.start();  ...
  • kapukpk
  • kapukpk
  • 2016-11-02 15:35:55
  • 4678

多线程中不用start()而用run()的后果

《Java多线程设计模式》P37页习题 使用run()实际为主线程,没有产生新的线程。 public class Main {     public static void main(String[]...
  • chenggang2010
  • chenggang2010
  • 2017-05-03 21:23:36
  • 436

Thread的run()与start()的区别

java的线程是通过java.lang.Thread类来实现的。VM启动时会有一个由主方法所定义的线程。可以通过创建Thread的实例来创建新的线程。每个线程都是通过某个特定Thread对象所对应的方...
  • xuxurui007
  • xuxurui007
  • 2012-06-22 20:01:04
  • 74300

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

区别 run() 只是一个普通的方法调用,不会开启新的线程。 start() 会开启新的线程,分配新的资源。里面的变量互不影响。 实例 package multithr...
  • zengmingen
  • zengmingen
  • 2016-11-18 15:16:18
  • 2422

关于多线程run和start的区别

先简单描叙一下创建线程的方式通过继承TH
  • chuming0311
  • chuming0311
  • 2014-04-23 00:02:25
  • 4965

启动一个线程是用run()还是start()? 为什么?

启动线程肯定要用start()方法。当用start()开始一个线程后,线程就进入就绪状态,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。当cp...
  • xieping1990
  • xieping1990
  • 2011-05-19 20:46:00
  • 3292
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 30万+
    积分: 4331
    排名: 8698
    联系方式

    博文主要参考网上资料,视频笔记,结合个人见解,仅供学习、交流使用,如有侵权,请联系博主删除。


    博客专栏
    最新评论