生活生产服务其它并发编程

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

线程的 run()和 start()有什么区别?

参与22

4同行回答

nkj827nkj827项目经理长春长信华天
每个线程都有要执行的任务。线程的任务处理逻辑可以在Tread类的run实例方法中直接实现或通过该方法进行调用,因此 run()相当于线程的任务处理逻辑的入口方法,它由Java虚拟机在运行相应线程时直接调用,而不是由应用代码进行调用。而start()的 作用 是启动相应的线程。启动一...显示全部

每个线程都有要执行的任务。线程的任务处理逻辑可以在Tread类的run实例方法中直接实现或通过该方法进行调用,因此 run()相当于线程的任务处理逻辑的入口方法,它由Java虚拟机在运行相应线程时直接调用,而不是由应用代码进行调用。
而start()的 作用 是启动相应的线程。启动一个线程实际是请求Java虚拟机运行相应的线程,而这个线程何时能够运行是由线程调度器决定的。 start()调用结束并不表示相应线程已经开始运行,这个线程可能稍后运行,也可能永远也不会运行。

收起
系统集成 · 2020-04-30
浏览836
youki2008youki2008系统架构师DDT
每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,run()方法称为线程体。通过调用Thread类的start()方法来启动一个线程。start() 方法用于启动线程,run() 方法用于执行线程的运行时代码。run() 可以重复调用,而 start() 只能调用一次。start()方法来启...显示全部

每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,run()方法称为线程体。通过调用Thread类的start()方法来启动一个线程。

start() 方法用于启动线程,run() 方法用于执行线程的运行时代码。run() 可以重复调用,而 start() 只能调用一次。

start()方法来启动一个线程,真正实现了多线程运行。调用start()方法无需等待run方法体代码执行完毕,可以直接继续执行其他的代码; 此时线程是处于就绪状态,并没有运行。 然后通过此Thread类调用方法run()来完成其运行状态, run()方法运行结束, 此线程终止。然后CPU再调度其它线程。

run()方法是在本线程里的,只是线程里的一个函数,而不是多线程的。 如果直接调用run(),其实就相当于是调用了一个普通函数而已,直接待用run()方法必须等待run()方法执行完毕才能执行下面的代码,所以执行路径还是只有一条,根本就没有线程的特征,所以在多线程执行时要使用start()方法而不是run()方法。

收起
互联网服务 · 2020-04-30
浏览813
zhuqibszhuqibs软件开发工程师Adidas
从运行结果肯明显可以看出,使用start()方法具有异步执行的效果,而使用run()方法是同步执行的效果,运行结果中规中矩。 使用start()方法,是真的启动了相应的线程0-9,而使用run()方法并没有真的启动线程,而是由一个叫main的主线程去调用的run()方法。 所以,正确启动线程的方式是...显示全部

从运行结果肯明显可以看出,使用start()方法具有异步执行的效果,而使用run()方法是同步执行的效果,运行结果中规中矩。
使用start()方法,是真的启动了相应的线程0-9,而使用run()方法并没有真的启动线程,而是由一个叫main的主线程去调用的run()方法。
所以,正确启动线程的方式是使用start()方法。

收起
互联网服务 · 2020-04-30
浏览841
zftangzftang其它小白一枚
start:用start方法来启动线程,真正实现 度 了多线程运行,这时无需等待run方法体代码执行完毕 问 而直接继续执行下面的代码。显示全部

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

收起
互联网服务 · 2020-04-30
浏览827

提问者

wfang_2020
测试工程师DSL
擅长领域: 系统运维云计算容器

相关问题

问题状态

  • 发布时间:2020-04-30
  • 关注会员:5 人
  • 问题浏览:1775
  • 最近回答:2020-04-30
  • X社区推广