繁体   English   中英

Java线程-Start()

[英]Java Threads - Start()

做一些关于线程的研究,我对Java线程中的start()方法实际上做什么感到困惑。

我目前的理解是,start方法不会立即启动线程的执行,而是将其移到线程池中,等待线程调度程序选择执行该线程。

这个对吗? 我似乎找不到有关方法实际作用的任何好的资源。

确实,在执行对start()的调用时,它只是将调用调度为run() 您无法确定何时将有效地启动线程,也不能确定何时将其有效停止。

您可以在oracle网站上的Java文档中找到更多信息。

开始

public void start()导致该线程开始执行; Java虚拟机将调用此线程的run方法。 结果是两个线程同时运行:当前线程(从调用返回到start方法)和另一个线程(执行其run方法)。

抛出:IllegalThreadStateException-如果线程已经启动。 另请参见:run(),stop()

资源

您正在将线程与ThreadPools混淆

线程是“执行单元”,在单独的线程上执行的代码在您调用start()时与主程序并行运行

ThreadPools是建立在线程之上的一种机制,它允许您创建一线程,这些线程将注意执行提交给ThreadPool队列的任务。

是的,这是正确的。 您不知道何时将执行此线程,但可以确定它已安排运行。 看看下面的图片。 它说明了线程的生命周期: http : //cs.fit.edu/~ryan/java/language/thread.gif

start立即启动新线程,但是由于线程的本质,不能保证该线程中的任何代码行何时实际执行。 在这种情况下,不宜使用术语“线程池”,因为池的概念涉及在用户请求的任务之间重用的资源。 Thread实例硬连接到run方法的单个调用,此后线程死亡。

线程调度程序是本机OS级别的组件,不受JVM的直接控制。

当您调用Thread.start它会特别注意JVM来启动线程,而JVM将负责其生命周期。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM