主线&当前线程

时间:2016-06-14 06:25:53

标签: java multithreading

class SimpleThreading
{
    public static void main(String... args)
    {
        Thread t=new Thread();
        System.out.println(t.getName());
        System.out.println(Thread.currentThread().getName());
        t.start();
        System.out.println(Thread.currentThread().getName());
    }
}

在编写语句 t.start()之后,它应该将当前线程打印为" Thread-0"这是JVM给出的默认名称。但它再次打印Main。谁能清楚我怀疑我哪里错了?上面代码的输出是: 的线程0 主要 主

3 个答案:

答案 0 :(得分:2)

您的main方法在Main主题中运行。因此,在t.start()打印Main之后的两个println语句。

你的第二个线程什么也没做,因为你没有将任何Runnable个实例传递给Thread构造函数。

如果您将Runnable个实例传递给Thread构造函数,并且该run()的{​​{1}}方法将包含Runnable,那么您就可以了见System.out.println(Thread.currentThread().getName());打印。

例如,如果您使用的是Java 8,则可以替换

Thread-0

Thread t=new Thread();

或者您可以在Java 8之前的代码中编写相同的逻辑:

Thread t=new Thread(()->{System.out.println(Thread.currentThread().getName());});

答案 1 :(得分:1)

代码的最后一行是在主线程中运行的。如果要打印出正在运行的线程的名称,则必须将打印输出登录在线程中。

尝试以下:

Thread t=new Thread(new Runnable() { public void run() {System.out.println(Thread.currentThread().getName()); } });
System.out.println(t.getName());
System.out.println(Thread.currentThread().getName());
t.start();
//System.out.println(Thread.currentThread().getName());

答案 2 :(得分:0)

请参阅评论以获得解释:

class SimpleThreading
{
    public static void main(String... args) // main thread starts.
    {
        Thread t=new Thread(); // new thread object is created. (This is similar to any other java object). No thread created yet.
        System.out.println(t.getName()); // Prints the default name
        System.out.println(Thread.currentThread().getName()); // This line is executed by main thread. hence prints main
        t.start(); // Now, thread is created in runnable state
        System.out.println(Thread.currentThread().getName()); // This line is executed by main thread. hence prints main 
    }
}