在java线程应用程序中获取不正确的输出?

在java线程应用程序中获取不正确的输出?,java,eclipse,multithreading,Java,Eclipse,Multithreading,代码: public class ThreadNaming extends Thread{ public void run() { System.out.println("running"); } public static void main(String[] args) { ThreadNaming t1 = new ThreadNaming(); t1.start(); System.out.println(t1.getName()); }

代码:

public class ThreadNaming extends Thread{
public void run()
{
    System.out.println("running");
}

public static void main(String[] args)
{
    ThreadNaming t1 = new ThreadNaming();

    t1.start();

    System.out.println(t1.getName());   
}   
}
怀疑:根据我的理解,一旦遇到
t1.start()
新的调用堆栈并创建新线程,线程就会开始执行主函数。这个新创建的线程执行run方法,然后控制返回到执行
main()
函数的原始线程,然后执行下一个
System.out.println(t1.getName())
,因此根据这个流,输出应该是:

正在运行
线程-0

但是eclipse显示了以下输出

Thread-0
跑步

我在谷歌上搜索了线程的流控制,但没有得到任何结果,我无法理解为什么会发生这种情况?有人能用适当的控制流程来解释原因吗

注意:Thread-0是线程的名称


独特之处:我不想实现另一个问题中描述的行为,我想知道主线程和新线程如何同时执行的原因,因为我在教程中读到,调度程序一次只能执行一个线程。

从我收集的信息来看,这种情况完全有可能发生。
main
的开头,主线程正在运行。然后创建
ThreadNaming
类的实例。在下一行调用
t1.start()它启动一个新线程

虽然调用了它,但是主
线程仍然可以运行,调用
System.out.println(t1.getName())在它到达
System.out.println(“正在运行”)之前
ThreadNaming
类中。绝对不能保证在调用
getName()
之前执行
run()

为了在线程之间强制同步,您必须使用一些其他方法,例如(with)和


注意:您通常是
implement
ing
Runnable
而不是
extend
ing
Thread

您试过多次运行它吗?是的,我试过,但每次都得到错误的输出,说“错了”有点苛刻:)我知道,但我是一个初学者,我想让我的线程概念正确当你运行两个线程时,Java可以自由地以它喜欢的任何顺序运行它们。除非添加同步,否则不能依赖顺序。但在一个教程中,我研究过调度程序一次只能执行一个线程。如果这是正确的,那么在创建新线程时主线程是如何执行的?如果您有多处理器计算机,它们可以同时运行(但即使您没有,Java仍然可以选择在给定时间运行哪个线程,这意味着您的输出仍然正常)