在Java线程代码中;新实例已被忽略";警告

在Java线程代码中;新实例已被忽略";警告,java,multithreading,netbeans,compiler-warnings,Java,Multithreading,Netbeans,Compiler Warnings,因此,我尝试在NetBeans IDE 11.1中运行这段代码,它显示了“忽略新实例”的错误。我的标准教科书在下面的代码中没有提到警告。为什么会显示此错误?我可以做些什么来解决它?在构造函数中启动一个新线程?这也有问题吗 ======= class NewThread1 implements Runnable { Thread t1; NewThread1() { t1 = new Thread(); System.out.println("Thr

因此,我尝试在NetBeans IDE 11.1中运行这段代码,它显示了“忽略新实例”的错误。我的标准教科书在下面的代码中没有提到警告。为什么会显示此错误?我可以做些什么来解决它?在构造函数中启动一个新线程?这也有问题吗

=======

class NewThread1 implements Runnable {
    Thread t1;
    NewThread1() {
        t1 = new Thread();
        System.out.println("Thread : " + t1.getName());
        t1.start();  //Starting new thread in a constructor
    }

    public void run() {
        try {
            for (int i = 0; i < 5; i++) {
                System.out.println("When NewThread.i = " + i);
                t1.sleep(500);
            }
        } catch (Exception e) {
            System.out.println("t1 interrupted.");
        }
        System.out.println("t1 ends.");
    }
}

public class NewClass1 {
    public static void main(String[] args) {
        new NewThread1();  //New Instance Being Ignored 
        try {
            for (int i = 0; i < 5; i++) {
                System.out.println("When main.i = " + i);
                Thread.sleep(1000);
            }
        } catch (InterruptedException e) {
            System.out.println("main thread interrupted.");
        }
        System.out.println("Main thread end.");
    }
}
类NewThread1实现可运行{
螺纹t1;
NewThread1(){
t1=新线程();
System.out.println(“线程:+t1.getName());
t1.start();//在构造函数中启动新线程
}
公开募捐{
试一试{
对于(int i=0;i<5;i++){
System.out.println(“当NewThread.i=“+i”);
t1.睡眠(500);
}
}捕获(例外e){
System.out.println(“t1中断”);
}
System.out.println(“t1结束”);
}
}
公共类新类别1{
公共静态void main(字符串[]args){
new NewThread1();//忽略新实例
试一试{
对于(int i=0;i<5;i++){
System.out.println(“当main.i=“+i”);
睡眠(1000);
}
}捕捉(中断异常e){
System.out.println(“主线程中断”);
}
System.out.println(“主螺纹端”);
}
}

至少从Java语言的角度来看,这不是一个错误(您的ide可能被配置为使其成为一个错误)。忽略新实例是合法的,但是。。。为什么你要创造它,然后不使用它?这是一个警告。它正在被使用。。。当构造函数被调用,线程被创建时,它没有被有效地使用。在构造函数中启动线程不是好的样式;你不能像等待线程完成那样做。构造函数中的副作用是不好的做法。构造函数应该构造对象,而不是启动线程。此外,创建和启动一个什么都不做的线程有什么意义?最后,sleep是一种静态方法,而不是实例方法。它使当前线程处于睡眠状态,应该使用thread.sleep()调用它。现在,您的程序创建了一个名为
NewThread
(这是一种线程)的东西,然后对它不做任何操作。它不会启动它,所以实际上从未调用它的
run()
方法。在
NewThread
的构造函数中,它创建了另一个泛型空线程。它确实会启动线程,但由于线程是空的,JVM只会给它分配一些资源,在这一点上它会退出并将这些资源释放回JVM(因为它是空的)。