人有名字,线程也有;人有重名的,线程也可以重名。
人的名字可以出生前起,也可以出生后起,线程也一样。
人可以改名,线程也可以改名。
得到线程名字的方法是getName(),设置线程名字的方法是setName()。
下面的程序使用了getName方法得到线程的名字
public class demoSetName extends Thread{ //定义一个线程类
public void run(){ //覆盖Thread类的run方法
for(int i=1;i<6;i++) //run方法的作用是调用另一个printMsg方法
printMsg();
}
public void printMsg(){ //可以被调用的printMsg方法
Thread t = Thread.currentThread(); //方法内创建一个Thread对象的引用,把当前运行代码所在的线程的引用赋值给这个变量
String name = t.getName(); //使用getName方法,通过此引用t得到线程的名字
System.out.println("thread name = "+name); //输出线程的名字
}
public static void main(String[] args){
demoSetName d = new demoSetName(); //在主方法中创建线程对象
d.start(); //启动此线程对象
for(int i=1;i<6;i++)
d.printMsg(); //直接调用线程类的方法printMsg
}
}
运行程序
可以发现,进程中有两个线程,一个是主方法的线程main,一个是使用start方法启动的线程Thread-0
稍微改动一下上面的例子,在创建线程对象后,使用setName方法设置一下线程的名字,然后再启动运行
public class demoSetName extends Thread{
public void run(){
for(int i=1;i<6;i++)
printMsg();
}
public void printMsg(){
Thread t = Thread.currentThread();
String name = t.getName();
System.out.println("thread name = "+name);
}
public static void main(String[] args){
demoSetName d = new demoSetName();
d.setName("test Thread"); //使用setName方法设置线程的名字
d.start();
for(int i=1;i<6;i++)
d.printMsg();
}
}
运行一下:
可以发现,线程的名字改变了。