Thread.currentThread()与this的区别

  • 在Java多线程编程思想中有一段关于Thread.currentThread().getName()和this.getName()的问题.也看到很多人对这个问题进行了解答,感觉总不是一针见血,很繁琐,并且并没有一步步的进行说明,在这里,我做一下简单的讲解.
  • 先上代码:
package com.demo2;

public class CountOperate extends Thread {

    public CountOperate() {
        System.out.println("Thread.currentThread().getName()=" + Thread.currentThread().getName());
        System.out.println("this.getName() =" + this.getName());
    }

    @Override
    public void run() {
        System.out.println("Thread.currentThread().getName()=" + Thread.currentThread().getName());
        System.out.println("this.getName() =" + this.getName());
    }

}
package com.demo2;

public class Run {
    public static void main(String[] args) {
        CountOperate c = new CountOperate();
        Thread thread = new Thread(c);
        thread.setName("AAA");
        thread.start();
    }
}
  • 运行结果:
    运行结果

  • 为什么在new对象的时候,执行构造方法时 Thread.currentThread().getName()与this.getName()的结果不同呢.

  • Thread.currentThread()是指向当前线程的,由于我们是在main方法内new对象执行构造方法的,所以结果值是 main

  • 重点来啦

  • this.getName(); 是指当前对象所调用的getName()方法.当前对象是CountOperate对象,他本身是没有getName()方法的,从而执行该对象的父类Thread的getName()方法,

  • 而在new该对象的时候也执行了父类Thread的构造方法,底层内容如下:
    底层
  • 将name字段进行传递,在下图里面进行了赋值.
    这里写图片描述
  • 然后在getName()方法中 如下图
    这里写图片描述
  • 得到了刚赋值的 name ,从而就有了Thread-0

各位同学都懂了嘛~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值