下面的程序是如何执行的,因为线程引用没有被传递

时间:2017-01-19 13:34:38

标签: java multithreading

我无法理解下面这个程序的行为,以及我可以看到没有线程引用我们可以在其中传递myThread参考但仍然程序正在执行请告知它是主线程正在执行这个程序

class MyThread extends Thread 
{
    public static void main(String [] args) 
    {
        MyThread t = new MyThread();
         t.start();
        System.out.print("one. ");
         System.out.print("two. ");
    }
    public void run() 
    {
        System.out.print("Thread ");
    }
}

输出

one. two. Thread 

3 个答案:

答案 0 :(得分:1)

该程序由两个线程组成。

  1. 启动程序时启动的main()线程
  2. 您从main()
  3. 开始的MyThread线程

    这个电话:

    t.start();
    

    ...将启动第二个线程,它将运行MyThread类的run方法中的代码。

答案 1 :(得分:0)

因为当您致电t.start()时,会执行run()方法(您覆盖),

https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html

start()方法:

- Causes this thread to begin execution; the Java Virtual Machine calls the run method of this thread.

答案 2 :(得分:0)

我总是发现让你的Main类扩展某些内容(在示例代码中)最多可疑的做法,因为初学者不清楚当调用main方法时实际上还没有实例Main类(在本例中为MyThread类)。

所以我重写了这个例子,以便更清楚地了解会发生什么:

public class Main
{
    public static void main(String [] args)
    {
        // main gets called when starting your program (which is a thread created by the JVM for free)

        MyThread t = new MyThread();  // You create a new Thread here
        t.start();   // You start the thread
        System.out.print("one. ");  // In the mean time, the main thread keeps running here
        System.out.print("two. ");
    }

    public static class MyThread extends Thread {
        @Override
        public void run()
        {
            System.out.print("Thread ");
        }
    }
}