正常来说,一个线程start后的默认名字是Thread,
t.start();
t.setName();
这时可以修改线程名,而且可以多次setName,看了源代码也没懂为什么,求高手指导
这个t应该是这样产生的:
创建线程变量: Thread t = new Thread();
t.start();是启动线程
不知道你为什么要修改变量名
线程对象也是java对象,它有setName方法自然就可以调用,有什么问题呢?
建议你查下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);
}
这些和线程是否启动都没有关系。
应该没啥不懂的地方