作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
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 [Some Child Thread]
。但是,如果您删除该 super 调用,您将看到以下内容:
现在它只是 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/
我是一名优秀的程序员,十分优秀!