美文网首页
Thread.currentThread.getName和thi

Thread.currentThread.getName和thi

作者: sunpy | 来源:发表于2018-10-29 21:00 被阅读36次

this.getName

this的意思是代表当前对象的。而this在线程的环境下,代表的是当前线程实例对象本身。所以this.getName是当前线程实例对象的线程名称是什么。

Thread.currentThread.getName

Thread.currentThread.getName意思是在当前代码块中执行的线程名称是什么。

例子

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("run---end");
    }
}

public class Test {
    
    public static void main(String[] args) {
        CountOperate c = new CountOperate();
        Thread t1 = new Thread(c);
        System.out.println("main begin t1 isAlive=" + t1.isAlive());
        t1.start();
        System.out.println("main end t1 isAlive=" + t1.isAlive());
    }
}

结果:

CountOperate---begin
Thread.currentThread().getName()=main
Thread.currentThread().isAlive()=true
this.getName()=Thread-0
this.isAlive()=false
CountOperate---end
main begin t1 isAlive=false
main end t1 isAlive=true
run---begin
Thread.currentThread().getName()=Thread-1
Thread.currentThread().isAlive()=true
this.getName()=Thread-0
this.isAlive()=false
run---end

说明:
① 首先搞明白该例子中一共有三条线程:
main线程:执行main方法的线程。
Thread-0线程:当前CountOperate线程实例的线程。
Thread-1线程:new Thread类创建的线程。


② CountOperate初始化代码说明:

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

执行构造器,然后当前main方法中执行初始化CountOperate类,所以当前线程的名称是main,状态是true。而当前CountOperate线程实例为Thread-0,没有启动所以状态为false。


③ Thread1线程说明:

main begin t1 isAlive=false
main end t1 isAlive=true

Thread-1线程的线程执行器没有启动,那么状态为false。执行start方法,Thread-1线程的线程执行器启动,那么状态就为true了。


④ run方法执行说明:

run---begin
Thread.currentThread().getName()=Thread-1
Thread.currentThread().isAlive()=true
this.getName()=Thread-0
this.isAlive()=false
run---end

首先执行run方法的线程为Thread-1,所以当前代码块中的线程为Thread1(Thread.currentThread().getName()=Thread-1),状态自然为true。
但是this.getName()是代表当前线程Thread-0的实例,因为CountOperate线程根本没有启动,所以状态为false。

相关文章

网友评论

      本文标题:Thread.currentThread.getName和thi

      本文链接:https://www.haomeiwen.com/subject/gwyitqtx.html