调用Thread类的方法:public final String getName()
为什么得到的线程对象的名称默认是:Thread-0、Thread-1、Thread-2、...呢?

 1 package cn.itcast_03;
 2
 3 /*
 4  * Thread类的方法:
 5  *         public final String getName() 获取线程对象的名称(放在需要被线程执行的代run()方法里面)
 6  *
 7  */
 8 public class MyThreadDemo {
 9     public static void main(String[] args) {
10         // 创建线程对象
11         // 无参构造
12         MyThread my1 = new MyThread();
13         MyThread my2 = new MyThread();
14         my1.start();
15         my2.start();
16     }
17 }

 1 package cn.itcast_03;
 2
 3 public class MyThread extends Thread {
 4
 5     public MyThread() {
 6     }
 7
 8     // 需要被线程执行的代码
 9     @Override
10     public void run() {
11         for (int x = 0; x < 100; x++) {
12             System.out.println(getName() + ":" + x);
13         }
14     }
15 }

我们查看getName()方法的底层源码可知():class Thread {private char name[];public Thread() {init(null, null, "Thread-" + nextThreadNum(), 0);}private void init(ThreadGroup g, Runnable target, String name, long stackSize) {init(g, target, name, stackSize, null);}private void init(ThreadGroup g, Runnable target, String name, long stackSize, AccessControlContext acc) {//大部分代码被省略了
        ...// 将传进来的name(name为字符串)转化为字符数组this.name = name.toCharArray(); // this.name 指的是 private char name[];// name.toCharArray(); 这句中的name是传递进来的name,是由"Thread-" + nextThreadNum()得到的name,nextThreadNum()方法第一次返回的是0,第二次返回的是1,...
        ...}    private static int threadInitNumber; // 0, 1, 2private static synchronized int nextThreadNum() {return threadInitNumber++; // 0, 1        注意:是后++  nextThreadNum()方法第一次返回的是0,第二次返回的是1,...  
    }public final String getName() {return String.valueOf(name); // String类的方法:把字符数组转为字符串
    }
}class MyThread extends Thread {public MyThread() {super();}
}

由以上可知,由MyThread my1 = new MyThread();第一次调用无参构造的时候,就会去父类thread 调用位无参构造,而父类的无参构造是一系列的init() 方法,最终得到 Thread-0,启动线程后,再通过Thread类的getName()方法得到线程对象的名称。同理,MyThread my2 = new MyThread();第二次调用无参构造的时候,就会去父类thread 调用位无参构造,而父类的无参构造是一系列的init() 方法,最终得到 Thread-1,启动线程后,再通过Thread类的getName()方法得到线程对象的名称。

我的GitHub地址:https://github.com/heizemingjun
我的博客园地址:http://www.cnblogs.com/chenmingjun
我的蚂蚁笔记博客地址:http://blog.leanote.com/chenmingjun
Copyright ©2018 黑泽明军
【转载文章务必保留出处和署名,谢谢!】

调用Thread类的方法:public final String getName() 为什么得到的线程对象的名称默认是:Thread-0、Thread-1、Thread-2、...呢?...相关推荐

  1. java 简单的调用类_java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊...

    java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊 java 调用 C# 类库搞定,可以调用任何类及方法,很简单,非常爽啊 总体分三步走: 一.准备一个 C# 类库 (d ...

  2. java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊...

    java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊 java 调用 C# 类库搞定,可以调用任何类及方法,很简单,非常爽啊 总体分三步走: 一.准备一个 C# 类库 (d ...

  3. oracle 执行java_oracle调用JAVA类的方法

    oracle调用JAVA类的方法主要有以下三种: 1. 用loadjava方法装载: 可能是调试方便,据说这种方法比较通用. c:\test\hello.java public class hello ...

  4. 在ABAP XSLT中调用ABAP类的方法

    本文介绍在ABAP XSLT中调用ABAP类的方法. 要获取更多Jerry的原创文章,请关注公众号"汪子熙":

  5. 在不是Thread类的子类中,如何获取线程对象的名称呢?

    我想要获取main方法所在的线程对象的名称,该怎么办呢? 遇到这种情况,Thread类就提供了一个很好玩的方法: public static Thread currentThread() 返回当前正在 ...

  6. java的Thread类start0方法源码

    带着几个问题去看源码 1.如何找到native方法的源码 2.Java的Thread对象.JavaThread.OSThread.操作系统线程 3.Java线程与操作系统线程的关联 4.Java线程保 ...

  7. Java中Thread类的方法简介

    1.新建线程 Thread t1 = new Thread(); t1.start(); 新建线程,应该调用start()方法启动线程:如果直接调用run()方法,该方法也会执行,但会被当做一个普通的 ...

  8. c调用其他类的方法_吊打面试官-类加载器

    1. 什么是类加载器? 类加载器(class loader)用来加载 Java 类到 Java 虚拟机中.一般来说,Java 类的虚拟机使用 Java 方式如下:Java 源程序(.java 文件)在 ...

  9. 面向对象--类、方法、final、继承、组合

    对象.类-表格 类-表格的表头 对象-表格的内容 类就是对象的抽象,对象的模板. 对象是类的具体实例. |姓名|年龄| |张三 | 14 | | 李4 | 20 | 类:class.对象:object ...

  10. c调用其他类的方法_Java 的 Native 方法——今天又进步了

    1. 简介 1.1 个人理解 初次遇见 native 是在 java.lang.String 源码中的一个 intern 方法: public native String intern(); 因为还是 ...

最新文章

  1. Ext.widgets-Button,SplitButton,CycleButton
  2. GitHub 轻松提速教程
  3. Linux驱动之平台设备
  4. Reasoning about Entailment with Neural Attention-学习笔记
  5. python中import sys_python import sys出错怎么办
  6. Firefox(火狐)下载时卡在最后1秒解决办法
  7. 交互式python解释器_从python脚本中调用python交互式解释器
  8. [转]cookie、sesstion、localstorage、sesstionstorage的使用和区别
  9. php抛出异常Exception和\Exception使用区别
  10. java中的Stack解析
  11. 解决pip Could not fetch URL There was a problem confirming the ssl certificate: HTTPSConnectionPool问题
  12. 常用的企业邮箱有哪些?企业邮箱有哪几种?
  13. css-富文本编辑显示
  14. python matplotlib画爱心
  15. Vue+Vant 基于DatetimePicker进行二次开发,实现yyyyMMdd hh:mm:ss时间选择
  16. win8: html5+css3+js
  17. audio 小程序 放大_微信小程序搜索优化指南
  18. python用于导入模块或模块中的对象_在 Python 中导入模块中的对象有哪几种方式? (5.0分)_学小易找答案...
  19. Python之人民币与美元的换算
  20. [离散数学]命题逻辑P_5:命题公式分类和等价

热门文章

  1. python unpack_Python使用struct处理二进制(pack和unpack用法)
  2. php完成润年判定程序编写,python闰年判定代码是什么
  3. android 结算权限,如何在Android应用程序中实施应用内结算?
  4. oracle 存过 的语法,oracle 存储过程的基本语法_oracle
  5. h5 右下角浮动按钮_Flutter 浮动按钮-FloatingActionButton的使用
  6. c语言程序设计最后一题调试时闪退,visual studio 2017调试时闪退。
  7. Keras的基本使用(1)--创建,编译,训练模型
  8. 阿里开发者招聘节 | 面试题02-04:给定一个二叉搜索树(BST),找到树中第K小的节点...
  9. iOS App之间的通信方式
  10. 基于SURF特征的图像与视频拼接技术的研究和实现(一)