-1

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

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

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

4

6 回答 6

3

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

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

于 2012-11-05T11:47:33.767 回答
2

开始

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

抛出: IllegalThreadStateException - 如果线程已经启动。另请参阅:运行(),停止()

来源

于 2012-11-05T11:46:01.217 回答
1

您将 Threads 与 ThreadPools 混淆了

线程是“执行单元”,当您调用时,在单独线程上执行的代码与您的主程序并行运行start()

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

于 2012-11-05T11:49:00.677 回答
1

是的,这是正确的。您不知道该线程何时执行,但可以确定它已被安排运行。看看下面的图片。它解释了线程的生命周期:http: //cs.fit.edu/~ryan/java/language/thread.gif

于 2012-11-05T11:51:09.287 回答
1

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

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

于 2012-11-05T11:52:34.590 回答
0

当你调用Thread.start它时,它会为 JVM 启动一个线程,而 JVM 会处理它的生命周期。

于 2012-11-05T11:47:17.020 回答