文章目录
线程名字
- 线程名字
一个好的习惯是 每创建一个线程, 就给它起一个有意义的名字. 这样在生产环境或者测试环境排查错误的时候, 能够快速的定位错误. Thread类中, 线程名称的代码如下. 可以看到是一个从0自增的,
private static int threadInitNumber;
private static synchronized int nextThreadNum() {
return threadInitNumber++;
}
public Thread() {
init(null, null, "Thread-" + nextThreadNum(), 0);
}
如下的代码为Thread类中设置线程名称的源码. 注意的是, 线程内部的名称,即使是线程调用了start方法也能修改. 但是setNativeName方法,有做一个判断, jvm中的线程的名称, 一旦运行起来了, 就不能进行修改了. threadStatus 为0代表没有调用start方法
public final synchronized void setName(String name) {
checkAccess();
if (name == null) {
throw new NullPointerException("name cannot be null");
}
this.name = name;
if (threadStatus != 0) {
setNativeName(name);
}
}