326 设置和获取线程名称
(查看源码看了很多。。。)
在e325中,运行后的结果无法直接看出是哪个线程的,这节课解决这个问题。
【Thread类中设置、获取线程名称的方法】
void setName(String name) | 字面意思 |
String getName() |
【代码思路】
getName方法
在sout内加上,运行后写屏了Thread-0、Thread-1
ctrl b查看getName的源码,如下
public final String getName() {
return name;
}
public Thread(Runnable target) {
this(null, target, "Thread-" + nextThreadNum(), 0);
}
private static int threadInitNumber;
private static synchronized int nextThreadNum() {
return threadInitNumber++;
}
由此可知,若未设置线程名称,且调用getName方法,则返回"Thread-" + nextThreadNum()格式的线程名称,nextThreadNum从0开始,每执行一次则++
可以不用setName方法,用带参构造方法给线程设置名称吗?
——可以,在MyThread类中写一个带String参数的构造方法,然后带参创建MyThread对象即可
如何查看main方法的线程?
——使用currentThread方法,返回当前正在执行的线程对象
---------------------------------------------
package e325aso;
public class MyThread326 extends Thread {
public MyThread326(){}
public MyThread326(String name){
super(name);
}
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.print(getName()+":"+i+".");
}
}
}
---------------------------------------------
package e325aso;
public class MyThreadDemo326 {
public static void main(String[] args) {
MyThread326 my0 = new MyThread326();
my0.start();
MyThread326 my1 = new MyThread326();
my1.setName("MOLE");
my1.start();
MyThread326 my2 = new MyThread326("RAT");
my2.start();
System.out.println(Thread.currentThread().getName());
}
}
/*
main
Thread-0:0.Thread-0:1.Thread-0:2.Thread-0:3.Thread-0:4.RAT:0.RAT:1.RAT:2.RAT:3.RAT:4.MOLE:0.MOLE:1.MOLE:2.MOLE:3.MOLE:4.
*/