Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java线程-Start()_Java_Multithreading - Fatal编程技术网

Java线程-Start()

Java线程-Start(),java,multithreading,Java,Multithreading,在研究线程时,我对Java线程中的start()方法的实际功能感到困惑 我目前的理解是,start方法不会立即启动线程的执行,而是将其移动到线程池中,等待线程调度程序选择它执行 这是正确的吗?我似乎找不到任何关于这些方法实际作用的好资源 开始 public void start()导致该线程开始执行;爪哇 虚拟机调用此线程的run方法。结果是 两个线程同时运行:当前线程 从对start方法的调用返回)和另一个线程( 执行其run方法) 抛出:IllegalThreadStateException

在研究线程时,我对Java线程中的
start()
方法的实际功能感到困惑

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

这是正确的吗?我似乎找不到任何关于这些方法实际作用的好资源

开始

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

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


当您调用
Thread.start
时,它会对JVM进行特殊的安装,以启动线程,JVM将负责其生命周期

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


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

您将线程与线程池混淆了

线程是一个“执行单元”,当您调用
start()


线程池是一种建立在线程之上的机制,它允许您创建一组线程,负责执行提交到线程池队列的任务。

是的,这是正确的。您不知道该线程将在何时执行,但可以确定它已计划运行。
请看下图。它解释了线程的生命周期:

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


线程调度程序是一个本机操作系统级组件,不受JVM的直接控制。

这部分的第一部分只是双重对话,除非它指的是一些不存在的字节码指令,其余部分是不正确的。JVM本身不实现线程生命周期:操作系统实现。