gpt4 book ai didi

java - 实现 Runnable 并扩展 Thread 类的线程名称

转载 作者:行者123 更新时间:2023-12-01 09:38:36 25 4
gpt4 key购买 nike

我知道创建新线程有两种方法,实现 Runnable 接口(interface)扩展 Thread 类。我编写了一个实现 Runnable 接口(interface)的简单程序。

public class tp implements Runnable {

public void run() {
System.out.println("Hello from "+ Thread.currentThread().getName());
}

public static void main(String args[]) {
tp o1= new tp();
Thread t1 = new Thread(o1);
Thread t2 = new Thread(o1);
System.out.println(Thread.currentThread().getName());
t1.start();
t2.start();
//(new Thread(new tp())).start();
}

}

它有以下输出:

main
Hello from Thread-0
Hello from Thread-1

然后我扩展类(class)。

public class tp extends Thread {

public void run() {
System.out.println("Hello from "+ Thread.currentThread().getName());
}

public static void main(String args[]) {
tp o1= new tp();
Thread t1 = new Thread(o1);
Thread t2 = new Thread(o1);
System.out.println(Thread.currentThread().getName());
t1.start();
t2.start();
//(new Thread(new tp())).start();
}

}

产生了这个输出:

main
Hello from Thread-1
Hello from Thread-2

我无法理解为什么当我实现接口(interface)时线程名称以 Thread-0 开头,而当我扩展 Thread 类时线程名称以 Thread-1 开头。

最佳答案

在第二个示例中,tp 类调用其父构造函数。由于它的父级是 Thread,因此 main+ 中的 tp 对象获取第一个自动分配的名称 (Thread-0) >).

您永远不应该依赖自动生成的名称。如果某个名字对您很重要,请调用Thread constructor that allows you to set your own name .

+旁注:不要使用相同的名称来命名类和变量,否则会引起歧义。

关于java - 实现 Runnable 并扩展 Thread 类的线程名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38624896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com