下面的程序显示的线程的名字为何是默认的”Thread-0“而不是设定的线程名?

imfang 2016-05-21 10:32:58
下面的程序显示的线程的名字为何是默认的”Thread-0“而不是”A“?

经测试将this.getName()改为Thread.currentThread().getName()是可以正确显示设置的线程名”A"的。


class MyWork extends Thread{
@Override
public void run() {
for(int i=0;i<5;++i){
System.out.println(this.getName()+": "+i);
}
}
}

public class Test {
public static void main(String[] args) throws InterruptedException{
Thread t=new Thread(new MyWork(),"A");
t.start();
}
}
运行结果:
Thread-0: 0
Thread-0: 1
Thread-0: 2
Thread-0: 3
Thread-0: 4

...全文
348 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
imfang 2016-05-22
  • 打赏
  • 举报
回复
class MyWork extends Thread{
	public MyWork(String name){
		super(name);
	}
    @Override
    public void run() {
        for(int i=0;i<5;++i){
            System.out.println(this.getName()+": "+i);
        }
    }
}
 
public class Test {
    public static void main(String[] args) throws InterruptedException{
        Thread t=new MyWork("AAA6");
        t.start();
    }
}
运行结果:
AAA6: 0
AAA6: 1
AAA6: 2
AAA6: 3
AAA6: 4
LOVEv海盗 2016-05-21
  • 打赏
  • 举报
回复
Thread t=new Thread(new MyWork(),"A"); 这句可以看做: Runnable run=new MyWork(); Thread t=new Thread(run,"A"); 可以看到这个构造方法第一个参数是一个Runnable(因为Thread实现了该接口,所以没有冲突), 而new Thread(run,"A"); 即又New了一个新线程,名字为A。 可以猜想,在新线程里 的run方法里面,应该是简单调用了runnable的run方法:

class  Thread{
   private Runnable runnable;
    @Override
    public void run() {
       runnable.run();
    }
}

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧