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

标签 java multithreading

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/

相关文章:

java - 以编程方式构建 Netbeans 平台应用程序时出现 Ant 类路径错误

java - 来自另一个 servlet 的 request.getContext?

java - 并发:HashMap 和 Lists 作为值

c# - 同步线程 - 无 UI

java - 如何编写创建新线程的单元测试

java - 如何在android中缩放矩形?

java - 如何在 log4j2 中实现日期模式转换器

c# - Interlocked.Increment 字典值

java - 如何在java中使用内部锁?

java - 通过公共(public)API导出non_public类型