Java:Thread.currentThread()。getName()返回“ NO_THREAD_YET”

时间:2019-05-27 12:27:34

标签: java multithreading threadpool runnable executorservice

我有一个Web服务,它会在服务启动时像这样运行线程池:

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

Workerthread类如下:

    class WorkerThread implements Runnable {

    public WorkerThread () {
    }

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

问题:有时线程名称为NO_THREAD_YET,但我无法弄清发生这种情况的情况。我猜ExecutorService尚无任何可用的免费威胁,但是为什么池没有满时扔一个Exception,我尝试添加一个新的WorkerThread吗?

如何确保Thread.currentThread().getName()始终从池中返回有效线程的ID?

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

1 个答案:

答案 0 :(得分:2)

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

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

该任务完成后,线程“返回”到池中,以供其他任务使用,并在最终请求时产生这样的输出。

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