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
我有一个在服务启动时运行线程池的网络服务,如下所示:
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