如何选择Java线程名称?

如何选择Java线程名称?,java,multithreading,Java,Multithreading,在我的应用程序中,我创建了一些线程(可能很多,但在同一时间活动的线程不会超过10个,而且它们不会做大的工作),在执行结束时(我在继续之前加入所有线程),因为它们在循环中做工作,它们会做一些时间,但即使它们都完成了(加入)当我检查它们的名称时,线程XXX永远不会重置,所以我想知道这是否正常,我最初认为当线程终止时,它会减少XXX的数量,但这会增加一些可能不太有用的事情 我在javadoc中搜索过,但只找到以下语句: 为了便于识别,每个线程都有一个名称。多个线程可能具有相同的名称。如果在创建线程时未

在我的应用程序中,我创建了一些线程(可能很多,但在同一时间活动的线程不会超过10个,而且它们不会做大的工作),在执行结束时(我在继续之前加入所有线程),因为它们在循环中做工作,它们会做一些时间,但即使它们都完成了(加入)当我检查它们的名称时,线程XXX永远不会重置,所以我想知道这是否正常,我最初认为当线程终止时,它会减少XXX的数量,但这会增加一些可能不太有用的事情

我在javadoc中搜索过,但只找到以下语句:

为了便于识别,每个线程都有一个名称。多个线程可能具有相同的名称。如果在创建线程时未指定名称,则会为其生成新名称

那么,有人知道在线程1到10结束后,以下名称将命名为11和+,这是否正常吗

提前谢谢


编辑:每次我写我的问题,然后我在开始时写Hello,这也很奇怪,但由于某种原因,它被删除了,我无法在第一行之前添加一行。

如果让JRE选择名称(不将
name
参数传递给
线程
执行器),那么只需遍历其代码:

Thread#Thread()
code:

public Thread() {
    init(null, null, "Thread-" + nextThreadNum(), 0);
}
然后查看
线程#nextThreadNum

/* For autonumbering anonymous threads. */
private static int threadInitNumber;

private static synchronized int nextThreadNum() {
    return threadInitNumber++;
}

您可以看到
threadInitNumber
是一个永远不会重置的
static
memeber,因此在应用程序运行时它将不断增加

如果使用以下内容创建新线程:

Thread thread = new Thread();
答案是肯定的,至少在环境方面:

java version "10.0.1" 2018-04-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.1+10)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.1+10, mixed mode)
源代码清楚地显示了这一点:

public Thread() {
    init(null, null, "Thread-" + nextThreadNum(), 0);
}

private static synchronized int nextThreadNum() {
    return threadInitNumber++;
}
但是API中没有保证这一点,所以如果您确实关心它,可以定制线程工厂。例如:

import java.util.concurrent.ThreadFactory;

public class DefaultThreadFactory implements ThreadFactory {

    private static int threadInitNumber;

    private static synchronized int nextThreadNum() {
        return threadInitNumber++;
    }


    @Override
    public Thread newThread(Runnable r) {
        return new Thread("Thread-" + nextThreadNum());
    }
}

如果您关心线程名称,那么您需要自己命名它们。如果您不指定线程名称(这意味着您将找不到Javadoc),那么很可能由实现决定如何生成线程名称。如何创建线程?“每次我写问题时,我都会在开始时写Hello,这很奇怪,但由于某种原因,它被删除了,我无法在第一行之前添加一行。”-诸如问候、介绍和“提前感谢”之类的内容被认为是不必要的,它们要么自动删除,要么稍后由(人工)编辑删除。(从未来某个正在寻找解决方案的人的角度考虑这个问题。)我不在乎他们的名字,否则我会自己重命名他们,我只是想很久以前安装Eclipse时,我确实安装了JRE,但没有安装jdk,所以我没有访问源代码的权限,我想现在是我安装它的时候了,因为我可以在没有帮助的情况下访问它,很抱歉打扰你。