Java: Thread.currentThread().getName() returns "NO_THREAD_YET"

Java: Thread.currentThread().getName() returns "NO_THREAD_YET"

我有一个在服务启动时运行线程池的网络服务,如下所示:

ExecutorService threadPool = Executors.newFixedThreadPool(30);
threadPool.execute(new WorkerThread());

Workerthread class 看起来像这样:

    class WorkerThread implements Runnable {

    public WorkerThread () {
    }

    @Override
    public void run() {
        String threadName = Thread.currentThread().getName()
    }
}

问题:有时线程名称是 NO_THREAD_YET,我无法弄清楚 happens.I 猜测 ExecutorService 只是没有任何可用的免费威胁,但为什么没有池已满时是否抛出 Exception,我尝试添加一个新的 WorkerThread

如何确保 Thread.currentThread().getName() 总是 returns 池中有效线程的 ID?

编辑:class WorkerThread 是我自己的实现。这只是一个简化的示例代码,因为我传递给 WorkerThread 的其他参数,例如String 变量与此问题无关。

原因很可能是您在代码中的某处手动重命名了一个线程,例如在同一线程池中运行的其他一些任务期间:

@Override
public void run() {
    // ...
    Thread.currentThread().setName("NO_THREAD_YET");
    // ...
}

该任务完成后,池中的线程 "returns" 可用于其他任务,并在最终请求时产生这样的输出。

要获取不可修改的线程 ID,请使用 Thread#getId