• Java的Thread.currentThread().getName() 和 this.getName() 以及 对象.getName()区别???


    最近在看Java多线程这本书,但是发现里面有个概念自己搞不清楚.就是Thread.currentThread().getName() 和 this.getName() 以及 对象.getName()区别???

    首先要知道Thread类有9个构造方法,因为也是初学,所以只用到了2个构造方法.先列出待会需要用到的源代码.

    1) 无参的构造方法, 注意里面的nextThreadNum()这个方法.

    里面是一个静态的变量,没调用一次无参构造器,就执行++操作

    2) 带有一个Runnable对象的构造方法,因为Thread是实现Runnable方法的.所以可以传入一个Thread对象.

    接下来分析为什么会出现不同的name...上代码.

    ① 构造方法: Thread.currentThread.getName(): 构造方法是由main方法调用的. 方法获取到的名字是当前线程的名字.main方法也是一个线程,是一个主线程.

          this.getName(): 这个方法中的this,代表本类对象,在代码中是MyThread 所以这个方法获得的名字是Thread-0

          因为上面的源代码中给出了"Thread-"+nextThreadNum() 所以第一次调用的时候 会赋值为一个初始0,第二次就是Thread-1了.

    ② run方法: Thread.currentThread.getName():  run方法是由我们new 出来的MyThread() 调用start方法执行的.所以 Thread.currentThread.getName(): 的结果是Thread-0

          this.getName(): 这个方法中的this,代表本类对象,在代码中是MyThread 所以这个方法获得的名字是Thread-0

          可能会有疑惑,为什么都是Thread-0 而不是Thread-1呢? 后面会讲解到.

    ③总结: 如果是直接new一个自定义对象不交给 Thread线程执行调用 在其内部外部 使用 Thread.currentThread().getName()  ,对象实例.getName() 和 this.getName(),这3个区别都不存在,都是相同的,因为没有交给Thread执行,直接调用的当前实例本身

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    ① 构造方法: 同上 没什么可说的.

    ② run方法:  this.getName():  获取到的是new Mythread()这个类的对象.

          Thread.currentThread().getName(): 获取到的是new Thread(myThread)这个类的对象.

          因为获取到的是两个不同的对象,所以会出现Thread-0 和Thread-1

          而且threadInitNumber这个变量是一个静态的. nextThreadNum()这个方法是synchronized修饰的,不会造成同步问题.

    总结:  实际上new Thread(myThread)会将myThread应用的对象绑定到一个pravite变量target上,在thread被执行的时候.即thread.run()被调用的时候,它会调用target.run()方法,

        也就是说它是直接调用thread对象的run方法,

        再确切的说,再run方法被执行的时候,this.getName()实际上返回的是target.getName()

        而Thread.currentThread().getName()实际上是thread.getName()

    传送门: 里面有根据<Java多线程编程>这本书敲得代码,需要可以去拿 https://github.com/fk123456/MyThreadTest

    参考自两位大牛的博客:https://www.cnblogs.com/signheart/p/922dcf75dd5fe6b418d4475af89c4664.html 

    https://www.cnblogs.com/huangyichun/p/6071625.html   

  • 相关阅读:
    Java类的三大特征
    java语句
    Python数据类型深入学习之数字
    Python基础学习篇章四
    Python基础学习篇章三
    Python基础学习篇章二
    python基础学习篇章一
    项目中调用天气预报接口
    CI框架传递数组到view层问题记录
    记录使用CI框架开发项目时遇到的问题
  • 原文地址:https://www.cnblogs.com/fangke/p/9288053.html
Copyright © 2020-2023  润新知