多线程中this.getName()与Thread.currentThread().getName()的区别

public class CountOperate extends Thread {

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

    @Override
    public void run() {
        System.out.println("run---begin");
        System.out.println("Thread.currentThread.getName()=" + Thread.currentThread().getName());
        System.out.println("this.getName()=" + this.getName());
        System.out.println("run---end");
    }
    CountOperate thread = new CountOperate();
    Thread thread1 = new Thread(thread);
    thread1.setName("A");
    thread1.start();
}

结果:

CountOpera---begin
Thread.currentThread.getName()=main
this.getName()=Thread-0
CountOpera---end
运行结束
run---begin
Thread.currentThread.getName()=A
this.getName()=Thread-0
run---end

主要原因:在这里thread与thread1是不同的对象。run方法里的对象仍旧是CountOperate,所以接下来的

结果仍旧是Thread-0。如果不传递thread,直接使用thread.start()则会有一致性的结果。

主要这样理解就好了,其实this.getName()对象的方法,但是对象里面没这个方法,所以

继承了父类的方法,Thread.currentThread.getName()是调用这个方法的进程。


你可能感兴趣的:(java,java多线程)