Jav*_*ser 9 java multithreading
请解释以下代码的输出:
如果我打电话th1.run(),输出是:
EXTENDS RUN>>
RUNNABLE RUN>>
Run Code Online (Sandbox Code Playgroud)
如果我打电话th1.start(),输出是:
RUNNABLE RUN>>
EXTENDS RUN>>
Run Code Online (Sandbox Code Playgroud)
为什么这种不一致?请解释.
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();
}
}
Run Code Online (Sandbox Code Playgroud)
该Thread.start()方法启动一个新线程,该线程的入口点是run()方法.如果直接调用run(),它将在同一个线程中执行.鉴于调用Thread.start()将启动一个新的执行线程,run()可以在执行主方法的其余部分之后(如在您的示例中)调用该方法.
更改主要方法以th1.start()重复调用和运行,您将看到有时输出:
EXTENDS RUN>>
RUNNABLE RUN >>
Run Code Online (Sandbox Code Playgroud)
有时输出:
RUNNABLE RUN >>
EXTENDS RUN>>
Run Code Online (Sandbox Code Playgroud)
取决于java如何选择安排2个线程.
看看关于这个的java教程.