菜鸟请教java多线程问题

正常来说,一个线程start后的默认名字是Thread,
t.start();
t.setName();
这时可以修改线程名,而且可以多次setName,看了源代码也没懂为什么,求高手指导

5个回答

这个t应该是这样产生的:
创建线程变量: Thread t = new Thread();
t.start();是启动线程
不知道你为什么要修改变量名

qq_22646891
qq_22646891 就是想改下他的名字,但对setName的原理不是很清楚
3 年多之前 回复

线程对象也是java对象,它有setName方法自然就可以调用,有什么问题呢?

qq_22646891
qq_22646891 懂了,谢谢
3 年多之前 回复

建议你查下java的api文档,线程调用到start方法就开启了,setName只是改变t这个线程对象的名字,应该是可以设置参数给个字符串名字的,默认构造函数为空

意思就是线程的名字是可以更改的。并且可以更改多次。一般在线程启动前设置线程名.

/*
2015年8月13日17:26:11
创建线程的两种方式:

*/

class A extends Thread //方法一:继承Thread类
{
public void run()
{

    System.out.printf("%s在执行!\n", Thread.currentThread().getName());

    System.out.println("嘿嘿嘿嘿");
}   

}

class B implements Runnable //方法二:实现接口Runnable
{
public void run()
{
Thread Th = Thread.currentThread();//Thread.currentThread()返回当前线程的引用
System.out.printf("%s在执行!\n", Th.getName());
System.out.println("一一一一");

                }

}

class TestThread
{
public static void main(String[] args)
{
A aa = new A();
aa.setName("线程A");
aa.start();
//aa.start();//多次启动一个线程是非法的。
//特别是当线程已经结束执行后,不能再重新启动。
B bb = new B();
bb.run(); //可以用对象直接调用run()开启线程
Thread Tb = new Thread (bb);
Tb.setName("线程B"); //也可以用Thread中的start()方法启动线程
Tb.start();
System.out.printf("%s在执行!\n", Thread.currentThread().getName());

}
}


name 就是Thread类的一个实例变量,没什么特殊的地方。
private char name[];
public final void setName(String name) {
checkAccess();
this.name = name.toCharArray();
}
setName方法基本就是一个简单的setter方法。

    name的引用地方就一个:
        public final String getName() {
    return String.valueOf(name);
}
    这些和线程是否启动都没有关系。
    应该没啥不懂的地方
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问