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