Thread.currentThread().getName()与this.getName()的区别

环境:使用一:代码示例
创建继承Thread类的CountOperate

package com.kgf.test;

public class CountOperate extends Thread {

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

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

}

创建测试类

package com.kgf.test;

public class Run {

public static void main(String[] args) {
	CountOperate myThread = new CountOperate();
	myThread.setName("A");
	myThread.start();
}

}

效果如下:

CountOperate—begin
Thread.currentThread().getName()=main
Thread.currentThread().isAlive()=true
this.getName()=Thread-0
this.isAlive()=false
CountOperate—end
run—begin
Thread.currentThread().getName()=A
Thread.currentThread().isAlive()=true
this.getName()=A
this.isAlive()=true
Thread.currentThread() == this : true
run—end

分析原因
⑴先说构造方法中的代码结果
a:
Thread.currentThread().getName()=main
Thread.currentThread().isAlive()=true
上面这个结果是我们在实例化CountOperate对象时,调用无参构造时产生的,
并且调用CountOperate构造方法是主线程main。
b:
this.getName()=Thread-0
this.isAlive()=false
上面这个结果,首先我们需要搞清楚this代表的是什么?它代表的其实就是CountOperate类对象的引用,
是个线程类(它继承了Thread线程类),但是这个线程类并没有设置名字,所以Thread默认给了一个Thread-0,
默认名字的规则定义如下:

                 因为仅仅是运行构造方法,还未运行线程,所以this.isAlive() = false
  ⑵再说run方法中的代码结果
        a:
                 Thread.currentThread().getName()=A
                 Thread.currentThread().isAlive()=true
                  当前线程名字为A,A是我们手动赋予的myThread.setName("A");,并且它是运行着的
        b:
                this.getName()=A
                this.isAlive()=true
                Thread.currentThread() == this : true
                因为,我们运行的线程就是MyThread的引用,而this也是MyThread的引用,所以相同,结果也是一样。

下面我们保持线程类不变,修改我们的测试类
⑴修改测试类

package com.kgf.test;

public class Run {

public static void main(String[] args) {
	CountOperate myThread = new CountOperate();
	Thread thread = new Thread(myThread,"A");
	thread.start();
}

}

  ⑵效果

CountOperate—begin
Thread.currentThread().getName()=main
Thread.currentThread().isAlive()=true
this.getName()=Thread-0
this.isAlive()=false
CountOperate—end
run—begin
Thread.currentThread().getName()=A
Thread.currentThread().isAlive()=true
this.getName()=Thread-0
this.isAlive()=false
Thread.currentThread() == this : false
run—end

  ⑶先说构造方法中的代码结果
          a:
                  Thread.currentThread().getName()=main
                  Thread.currentThread().isAlive()=true
                  this.getName()=Thread-0
                  this.isAlive()=false
                  上面这个结果是我们在实例化CountOperate对象时,调用无参构造时产生的,
                  并且调用CountOperate构造方法是主线程main。上面这个结果,首先我们需
                  要搞清楚this代表的是什么?它代表的其实就是CountOperate类对象的引用,
                 是个线程类(它继承了Thread线程类),但是这个线程类并没有设置名字,
                 所以Thread默认给了一个Thread-0
  ⑷再说run方法中的代码结果
           a:
                  Thread.currentThread().getName()=A
                  Thread.currentThread().isAlive()=true
                  this.getName()=Thread-0
                  this.isAlive()=false
                  Thread.currentThread() == this : false
                从上面我们会发现this 与 Thread.currentThread()不是同一个引用,
                从测试类我们可以发现,我们启动线程的用的是thread对象,里面
                我们的构造参数是myThread,赋给Thread类中的属性target,之
                后在Thread的run方法中调用target.run();此时Thread.currentThread()
                是Thread的引用newThread, 而this依旧是MyThread的引用,所以是
                不一样的,打印的内容也不一样。

本文链接:https://blog.csdn.net/k_520_w/article/details/89053019

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值