gpt4 book ai didi

java - 线程初学者 : What's the point in using a super() method within the sub class's(extending Thread class) constructor?

转载 作者:搜寻专家 更新时间:2023-10-31 19:37:48 26 4
gpt4 key购买 nike

super() 用于从子类的构造函数中执行父类(super class)的构造函数。在这个程序中,不管有没有构造函数中的 super(),输出都是一样的。那么,您能否解释一下在这种情况下使用和不使用 super() 之间的区别?

    class SomeThread extends Thread {
String ThreadName;

SomeThread(String ThreadName) {
super(ThreadName); //Why Oh Why ?
this.ThreadName = ThreadName;
}

public void run(){
for(int ctr=1; ctr<=10; ctr++) {
System.out.println("From "+ThreadName+"...."+ctr);
try {
sleep(1000);
}catch(Exception e) {
System.out.println("Exception in "+ThreadName);
}
}
}

}

class ThreadAliveDemo {
public static void main(String[] args) throws Exception {
SomeThread FThread = new SomeThread("Some Child Thread");
System.out.println("Some Child Thread is alive "+FThread.isAlive());

FThread.start();

System.out.println("Some Child Thread is running.."+FThread.isAlive());

for(int ctr = 1; ctr<=5; ctr++) {
System.out.println("From.."+Thread.currentThread().getName()+"..."+ctr);
Thread.sleep(1000);
}

FThread.join();

System.out.println("Some Child Thread is alive.."+FThread.isAlive());

for(int ctr=6; ctr<=10; ctr++) {
System.out.println("From.."+Thread.currentThread().getName()+"..."+ctr);
Thread.sleep(1000);
}
}
}

最佳答案

调用父类(super class)构造函数Thread(String name) 显式设置系统 线程名称,稍后您可以使用Thread.currentThread().getName( )。如果您不显式调用父类(super class)构造函数,将使用默认构造函数来分配默认线程名称,如 Thread-1。这些线程名称可以出现在调试器 UI、jstack 输出等中,因此为您的线程分配有意义的名称是个好主意。例如,在 Eclipse 调试器中运行当前代码时,您将看到:

Thread name

所以你可以看到Thread [Some Child Thread]。但是,如果您删除该 super 调用,您将看到以下内容:

No thread name

现在它只是 Thread [Thread-0]

关于java - 线程初学者 : What's the point in using a super() method within the sub class's(extending Thread class) constructor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32678585/

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