1.currentThread()
静态方法,返回正在执行当前方法的线程
getName()和setName()
线程在被创建时,都有自己默认的名字
- getName()方法: 返回线程的名字
- setName()方法: 设置线程的名字
2.currentThread()方法的使用:
class MyThread extends Thread{
public MyThread(){
super();
// 2
System.out.println(this.currentThread().getName());
// 3
System.out.println(Thread.currentThread().getName());
}
public void run(){
// 4
System.out.println(this.currentThread().getName());
// 5
System.out.println(Thread.currentThread().getName());
}
}
public class Main{
public static void main(String[] args){
// 1
System.out.println(Thread.currentThread().getName());
MyThread t1 = new MyThread();
t1.start();
}
}
// 运行结果
main // 1
main // 2
main // 3
Thread-0 // 4
Thread-0 // 5
首先,执行的顺序是 1–>2–>3–>4–>5。
(1):当前的线程是main,也就是主线程,Thread.currentThread().getaName() 输出主线程的线程名。
(2、3):MyThread t1 = new MyThread(); 创建对象,进入 MyThread类的构造方法,依次输出 this.currentThread().getName()、Thread.currentThread().getName(),结果还是main,因为 对象 t1 的创建,以及 start()方法的调用都发生在 main线程中。
(4、5):start()方法调用后,t1线程启动,进入 run()方法,依次输出 this.currentThread().getName()、Thread.currentThread().getName(),结果是 Thread-0,因为 run()方法的执行所在的线程是 t1。
可以给主线程设置名字,在main线程中,调用 Thread.currentThread()方法获取主线程main,然后再调用 setName(String name)方法。
public static void main(String[] args){
Thread.currentThread().setName(“主线程”);
}
3.this.currentThread()与Thread.currentThread()
currentThread()方法 是静态方法,可以通过 类. 和 对象. 来调用,
this.currentThread() == Thhread.currentThread()。都是调用父类的 currentThread()方法。但习惯用 Thread.currentThread()。
注: 静态方法的使用细节
静态方法可以被继承,不能被重写。同时,静态方法不具有多态性。简单的来说,静态方法属于类。
子类可以有和父类一样的静态方法,这时候通过 this.调用的是子类自己的静态方法。而父类的静态方法在子类中被隐藏,需要 通过 super. 或 类. 来调用父类的静态方法。
class A{
public static void v(){
System.out.println("类A的静态方法");
}
}
class B extends A{
public static void v(){
System.out.println("类B的静态方法");
}
public void test(){
// 子类自己的静态方法
v();
this.v();
// 父类的静态方法
super.v();
A.v();
}
}
public class Main{
public static void main(String[] args){
B b = new B();
b.v(); // 类 B的静态方法
A a = new B();
a.v(); // 类 A的静态方法
b.test();
}
}