线程使用总结

一. 线程基本注意点

(1) Thread的构架函数可接收Runnable及Thread对象。在接收Thread对象时,特别要注意 name属性

public class Test {
    public static void main(String[] args){
        MyThread thread = new MyThread();
        Thread t1 = new Thread(thread);
        t1.setName("A");
        t1.start();
    }
    
    
    public static class MyThread extends Thread{
        public MyThread(){
            System.out.println("Thread.currentThread().getName():"+Thread.currentThread().getName());
            System.out.println("this.name:"+this.getName());
        }

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

输出结果为:

Thread.currentThread().getName():main
this.name:Thread-0
Thread.currentThread().getName():A
this.name(run):Thread-0

我们通常认为输出第四行应该和第三行一致,其实不然。this.getName() 获取的是实例对象thread中的属性值,而在main方法t1.setName(“A”),实际更改的是t1对象的属性,并未更改thread实例对象的name的属性;

另外Thread接收了Runnable及Thread实例对象实际上是直接调用了2个实例的run方法,因此实例所属线程应该是接收他们的线程。

原文地址:https://www.cnblogs.com/sandyflower/p/9997118.html