首页 > 解决方案 > 如何到达第一个线程 0 Java?

问题描述

我正在做我的研讨会,问题如下所示:

反向你好

编写一个名为 ReverseHello.java 的程序来创建一个线程(我们称之为线程 1)。

线程 1 创建另一个线程(线程 2);线程 2 创建线程 3;依此类推,直到线程 50。

每个线程都应该打印“Hello from Thread!”,但是你应该构造你的程序,使线程以相反的顺序打印他们的问候。

我的代码是这样的:

public class Task2 implements Runnable {

        static int threadNo = 1;

        @Override
        public void run() {
            if (threadNo <= 50) {
                Thread reverse = new Thread(new Task2());
                reverse.setName("Thread "+ threadNo);
                threadNo++;
                reverse.start();
                try {
                    reverse.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println("hello from " + Thread.currentThread().getName());
        }

        public static void main(String[] args) throws InterruptedException {
            Thread t2 = new Thread(new Task2());
            t2.start();
        }
    
}

输出是这样的:

hello from Thread 50
hello from Thread 49
hello from Thread 48
hello from Thread 47
hello from Thread 46
hello from Thread 45
hello from Thread 44
hello from Thread 43
hello from Thread 42
hello from Thread 41
hello from Thread 40
hello from Thread 39
hello from Thread 38
hello from Thread 37
hello from Thread 36
hello from Thread 35
hello from Thread 34
hello from Thread 33
hello from Thread 32
hello from Thread 31
hello from Thread 30
hello from Thread 29
hello from Thread 28
hello from Thread 27
hello from Thread 26
hello from Thread 25
hello from Thread 24
hello from Thread 23
hello from Thread 22
hello from Thread 21
hello from Thread 20
hello from Thread 19
hello from Thread 18
hello from Thread 17
hello from Thread 16
hello from Thread 15
hello from Thread 14
hello from Thread 13
hello from Thread 12
hello from Thread 11
hello from Thread 10
hello from Thread 9
hello from Thread 8
hello from Thread 7
hello from Thread 6
hello from Thread 5
hello from Thread 4
hello from Thread 3
hello from Thread 2
hello from Thread 1
hello from Thread-0

我不知道这最后一个hello from Thread-0是怎么来的,以及如何摆脱这个,因为问题只是从线程 1 到 50。

标签: javamultithreading

解决方案


从您的main方法开始的第一个线程永远不会设置线程名称,因此它将具有由 JVM 分配的默认名称,结果是"Thread-0".

一个简单的解决方案是在当前线程的方法开头设置线程名称run,而不是在启动的reverse线程上:

@Override
public void run() {
    Thread.currentThread().setName("Thread "+ threadNo);
    if (threadNo <= 50) {

推荐阅读