我有一个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
变量未连接到此问题。 最佳答案
原因很可能是您在代码中的某处手动重命名了一个线程,例如在同一线程池中运行的其他一些任务期间:
@Override
public void run() {
// ...
Thread.currentThread().setName("NO_THREAD_YET");
// ...
}
在该任务完成之后,线程“返回”池,该池可用于其他任务,并在最终被请求时产生这样的输出。
要获取不可修改的线程ID,请使用
Thread#getId
关于java - Java:Thread.currentThread()。getName()返回“NO_THREAD_YET”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56326069/