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

时间:2016-02-17 10:23:10

标签: 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());   
}   
}

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

running Thread-0

但是eclipse显示以下输出

Thread-0 running

我用google搜索线程的流量控制但没有得到任何东西,我无法理解为什么会发生这种情况?任何人都可以通过适当的控制来解释它的原因吗?

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

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

1 个答案:

答案 0 :(得分:0)

从我收集到的信息来看,这是完全合理的 在main的开头,主线程正在运行。然后,您创建ThreadNaming类的实例。在下一行,您调用t1.start();启动新主题

虽然这可以调用,但您的主Thread可以/仍然会运行,在之前调用System.out.println(t1.getName()); 它到System.out.println("running"); ThreadNaming }类。绝对无保证 run()将在<{strong> getName()电话之前执行

为了强制线程之间的同步,您必须使用其他一些方法,例如waitnotify}和join

注意:通常better off implement Runnable extend Thread <div class="myclass row"> <div class="col-xs-3" style="background-color: #1b6d85">1 assdasddasd</div> <div class="col-xs-9" style="background-color: #66512c">2 asas</div> </div> {/ 1}}。