美文网首页
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