[英]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.