java中 线程已经命名,为什么翻译出来是却是系统自动命名

线程已经命名,为什么翻译出来是却是系统自动命名

图片说明

图片说明

```class MyThread implements Runnable{
                private int time;
                private String name;
                public MyThread(String name,int time) {
                this.name = name;
                this.time = time;
                }
                public void run() {
                        try {
                                    Thread.sleep(this.time);
                                    }catch(Exception e) {
                                    e.printStackTrace();
                                    }
                    System.out.println(Thread.currentThread().getName()+ "休眠" + this.time+"毫秒");

        }
    };
 public class ThreadDemo04{
            public static void main(String args[]) {
            MyThread mt1=new MyThread("线程a",1000);  //此处已命名
            MyThread mt2=new MyThread("线程b",2000);
            MyThread mt3=new MyThread("线程c",3000);
            new Thread(mt1).start();
            new Thread(mt2).start();
            new Thread(mt3).start();

        }
}

System.out.println(Thread.currentThread().getName()+ "休眠" + this.time+"毫秒");
你都知道用this.time,咋不知道用this.name呢?

MyThread mt1=new MyThread("线程a",1000); //此处已命名
你的这种写法并不是设置线程名,
你的这种写法只是:一个myThread类的对象有一个name属性名字是线程a

new Thread(mt2).start();
看这行 代码, new 一个Thread 放入线程子类,并启动 线程,
这个代码就可以看出来了,其实真正的线程是 Thread 而不是MyThread

所以Thread.currentThread().getName()获取到的线程名属于 Thread 而不是输入MyThread的

所以设置线程名称应该是

Thread thread = new Thread(mt1);
thread.setName("线程a");
thread.start();