Java线程 - 开始()

时间:2012-11-05 11:44:03

标签: java multithreading

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

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

这是对的吗?我似乎无法找到关于方法实际做什么的任何好资源。

6 个答案:

答案 0 :(得分:3)

确切地说,当执行对start()的调用时,它只会安排对run()的调用。您无法确定线程何时有效启动,也无法确定何时有效停止。

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

答案 1 :(得分:2)

  

启动

     

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

     

抛出:IllegalThreadStateException - 如果线程已经存在   开始。另请参见:run(),stop()

Source

答案 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将负责它的生命周期。