Java 主线程&;当前线程

Java 主线程&;当前线程,java,multithreading,Java,Multithreading,在编写语句t.start()之后,它应该将当前线程打印为“thread-0”,这是JVM默认提供的名称。但是它会再次打印主线程。谁能澄清我的疑问,我错在哪里??上述代码的输出为: 线程-0 主要 Main您的Main方法在Main线程中运行。因此,两个println语句都在aftert.start()之前printMain 您的第二个线程什么也不做,因为您没有将任何Runnable实例传递给thread构造函数 如果将Runnable实例传递给Thread构造函数,那么Runnable的Runn

在编写语句t.start()之后,它应该将当前线程打印为“thread-0”,这是JVM默认提供的名称。但是它会再次打印主线程。谁能澄清我的疑问,我错在哪里??上述代码的输出为: 线程-0 主要
Main

您的Main方法在
Main
线程中运行。因此,两个println语句都在after
t.start()之前
print
Main

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

如果将
Runnable
实例传递给
Thread
构造函数,那么
Runnable
Runnable方法将包括
System.out.println(Thread.currentThread().getName()),您将看到打印的
线程-0

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

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

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

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

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

请尝试以下内容:

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

有关说明,请参见注释:

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());

t.start()
将启动一个新线程。它不会影响运行
main()
方法的线程,即“main”线程。结果如下所示。1.t、 getName()打印“线程-0”。2.Thread.currentThread().getName()打印“main”和3。t、 start()启动线程并调用run()方法并打印“thread-0”。结果:线程0主线程0
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());
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 
    }
}