Java创建Thread的问题

在Java中创建Thread:
Thread test2 =new Thread(new RunTest());
其构造方法为:

    public Thread(Runnable target) {
        this(null, target, "Thread-" + nextThreadNum(), 0);
    }

传入的参数中name的值为:"Thread-" + nextThreadNum()
其中关于nextThreadNum()的实现为:

    private static int threadInitNumber;
    private static synchronized int nextThreadNum() {
        return threadInitNumber++;
    }

这里threadInitNumber的初始化是在哪里实现的?要实现自加总要先获取到上一个线程的编号吧!
比如

        Thread test1 = new Thread(new RunTest());
        Thread test2 = new Thread(new RunTest());
        Thread test3 = new Thread(new RunTest());
        Thread test4 = new Thread(new RunTest());
        Thread test5 = new Thread(new RunTest());
        System.out.println(test1.getName());
        System.out.println(test2.getName());
        System.out.println(test3.getName());
        System.out.println(test4.getName());
        System.out.println(test5.getName());

输出的结果是
Thread-0
Thread-1
Thread-2
Thread-3
Thread-4
每个Thread的name的初始化都是通过"Thread-" + nextThreadNum()方法的话,是怎么实现增加的呢?
threadInitNumber声明后不赋值,其值为0?
那么岂不是每个Thread的name都是Thread-0吗

阅读 2.3k
3 个回答

我理解是这样的,看源码如下所示:

    private static int threadInitNumber;
    private static synchronized int nextThreadNum() {
        return threadInitNumber++;
    }

首先threadInitNumber被声明为static类型,类中的静态成员是随类的加载而加载的,当类被加载时首先会对静态变量进行初始化,这时int值初始化为0,希望能帮到你

int的字段,不初始化的话是0

Java对象不赋值的话,存在默认初始值,对于int有默认初始值为0,对于对象的话是null,对于String是" "

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题