java - 为什么在java中的线程对象上调用start()时没有立即调用run()

标签 java multithreading runnable

或者是吗?
我有一个线程对象来自:

Thread myThread = new Thread(pObject);

其中 pObject 是实现 Runnable 接口(interface)的类的对象,然后我在线程对象上调用了 start 方法,如下所示:

myThread.start();

现在,我的理解是,当调用 start() 时,JVM 隐式(并立即)调用可能被覆盖的 run() 方法(就像我的情况一样)

但是,在我的例子中,似乎没有立即调用 start() 方法(根据需要),而是直到其他语句/方法从调用 block 完成,即如果我在 start() 调用之后有一个方法像这样:

myThread.start();
doSomethingElse();

doSomthingElse() 在 run() 方法运行之前执行。
也许我对 run() 总是在调用 start() 之后立即调用的初始前提有误。请帮忙!再次需要的是在 start() 之后立即执行 run()。谢谢。

最佳答案

嗯...run() 方法将在不同的线程 中运行。根据定义,这意味着您不能对当前线程中将执行的语句之前或之后做出任何假设,除非您显式同步它们。

关于java - 为什么在java中的线程对象上调用start()时没有立即调用run(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2690207/

相关文章:

java - 如何修复错误

java - Android - 即使下载是在单独的线程中启动的,但文件下载也会出现 NetworkOnMainThreadException

multithreading - 马克西玛。线程本地存储耗尽

java - 如何使用可运行程序在单例中执行工作?

java执行器延迟不工作

java - 如何检测字符中的空格?

java - java中的XOR绘画问题

java - 如何使用 TDD 处理无法访问的异​​常

java - 如何使 JLabel 的 setText 成为安全方法

java - 如何停止网络 I/O 的线程阻塞?