Nev*_*161 2 java eclipse multithreading program-entry-point
对于下面的程序,在eclipse上运行和调试时会出现不同的输出.
public class MyClass implements Runnable {
public static void main (String[] args) throws Exception {
Thread t = new Thread(new MyClass());
t.start();
System.out.print("Started");
t.join();
System.out.print("Complete");
}
public void run() {
for (int i = 0; i < 4; i++) {
System.out.print(i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当作为java应用程序运行时,OUTPUT是
Started0123Complete
在检查调试模式时,OUTPUT是
0123StartedComplete
有人可以帮忙吗?是因为两个线程?main thread以及开头的线程t.start().如果是,那么为什么主线程执行优先于先完成?
谢谢
根据定义,字符串"Started"和整数打印输出的顺序是不确定的.在您调用之后start,无法保证方法中的代码run将在调用之前出现的任何其他语句之前或之后执行join.这是多线程应用程序的本质.
您在调试模式与运行模式下看到某个输出的事实可能完全是偶然的,如果您多次运行代码或在JVM的不同平台/版本上运行您的代码可能会更改.如果在这种情况下需要确定性顺序,那么实现它的唯一方法是在调用之前打印一个字符串start或引入一些其他类型的信号量来强制线程等待主线程或反之.