做一些关于线程的研究,我对Java线程中的start()
方法实际上做了什么感到困惑。
我目前的理解是start方法不会立即启动线程的执行,而是将其移动到等待它的线程池中,由线程调度程序选择执行。
这是对的吗?我似乎无法找到关于方法实际做什么的任何好资源。
答案 0 :(得分:3)
确切地说,当执行对start()
的调用时,它只会安排对run()
的调用。您无法确定线程何时有效启动,也无法确定何时有效停止。
您可以在oracle网站上的Java Doc中找到更多信息。
答案 1 :(得分:2)
启动
public void start()使该线程开始执行; Java 虚拟机调用此线程的run方法。结果是 两个线程并发运行:当前线程(其中 从调用返回start方法)和另一个线程(其中 执行其run方法)。
抛出:IllegalThreadStateException - 如果线程已经存在 开始。另请参见:run(),stop()
答案 2 :(得分:1)
您将线程与ThreadPools混淆
线程是“执行单元”,当您调用start()
ThreadPools是一种构建在线程之上的机制,它允许您创建一个组线程,这些线程将负责执行您提交给ThreadPool队列的任务。
答案 3 :(得分:1)
是的,这是正确的。您不知道何时执行此线程但确定它已安排运行。 看看下面的图片。它解释了线程的生命周期:http://cs.fit.edu/~ryan/java/language/thread.gif
答案 4 :(得分:1)
start
立即启动新线程,但由于线程的本质,无法保证该线程中的任何代码行何时实际执行。在此上下文中使用术语“线程池”是不合适的,因为池的概念涉及在用户请求的任务之间重用的资源。 Thread
实例被硬连线到run
方法的单个调用,之后线程就会死掉。
线程调度程序是本机操作系统级组件,不受JVM的直接控制。
答案 5 :(得分:0)
当你调用Thread.start
时,它会对JVM进行特殊的instarcution以启动一个线程,JVM将负责它的生命周期。