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