java - 主线程和当前线程

标签 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 主要的 主要

最佳答案

您的主要方法在 Main 线程中运行。因此,t.start() 之后的 println 语句都打印 Main

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

如果将 Runnable 实例传递给 Thread 构造函数,并且 Runnablerun() 方法> 将包含 System.out.println(Thread.currentThread().getName());,您将看到打印了 Thread-0

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

Thread t=new Thread();

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

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

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

关于java - 主线程和当前线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37804428/

相关文章:

java - Java 中图像的组合重新缩放和颜色减少?

java - 在 Java 中维护值列表的最佳方法

java - Java 中具有自动索引的集合

c++ - 在工作完成后立即删除 boost::thread 对象的最佳方法是什么?

java.util.NoSuchElementException : No line found error java

ios - AFNetworking:在后台解析 xml

java BoxLayout面板的对齐方式

java - 在java中修改密码

c++ - 了解 memory_order_relaxed

C++ 多线程 block 主线程