请解释以下代码的输出:
如果我调用 th1.run()
,输出是:
EXTENDS RUN>>
RUNNABLE RUN>>
如果我调用 th1.start()
,输出是:
RUNNABLE RUN>>
EXTENDS RUN>>
为什么会出现这种不一致?请解释。
class ThreadExample extends Thread{
public void run() {
System.out.println("EXTENDS RUN>>");
}
}
class ThreadExampleRunnable implements Runnable {
public void run() {
System.out.println("RUNNABLE RUN>>");
}
}
class ThreadExampleMain{
public static void main(String[] args) {
ThreadExample th1 = new ThreadExample();
//th1.start();
th1.run();
ThreadExampleRunnable th2 = new ThreadExampleRunnable();
th2.run();
}
}
最佳答案
Thread.start()
方法启动一个新线程,这个线程的入口点是run()
方法。如果直接调用 run() ,它将在同一个线程中执行。鉴于调用 Thread.start()
将启动一个新的执行线程,run()
方法可能会在主线程的其余部分之后(如您的示例)被调用方法执行。
改变你的主要方法调用th1.start()
并重复运行,你会看到有时它输出:
EXTENDS RUN>>
RUNNABLE RUN >>
有时它会输出:
RUNNABLE RUN >>
EXTENDS RUN>>
取决于 java 选择如何安排您的 2 个线程。
查看 java tutorial对此。
关于java - 请解释 Thread run() 和 start() 方法的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3027495/