Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多线程控制台输出不同_Java_Multithreading - Fatal编程技术网

Java 多线程控制台输出不同

Java 多线程控制台输出不同,java,multithreading,Java,Multithreading,刚接触多线程,我遇到了一些问题和困惑。:) 例外输出 我的输出 为什么我的控制台输出与预期输出不同?谢谢。NewThread类中的变量t不是NewThread类型,因此它从不执行子线程循环。您永远不会对NewThread对象调用start(),因此您看不到其执行的任何输出是有道理的 系统对象是静态的,由在此VM上执行的所有线程共享 class ThreadDemo { public static void main(String[] args) { NewThread t = n

刚接触多线程,我遇到了一些问题和困惑。:)

例外输出

我的输出


为什么我的控制台输出与预期输出不同?谢谢。

NewThread类中的变量
t
不是
NewThread
类型,因此它从不执行子线程循环。您永远不会对NewThread对象调用start(),因此您看不到其执行的任何输出是有道理的

系统对象是静态的,由在此VM上执行的所有线程共享

class ThreadDemo {

public static void main(String[] args) {

    NewThread t = new NewThread();

    try {
        for (int i = 5; i > 0; i--) {
            System.out.println("Main Thread: " + i);
            Thread.sleep(1000);
            t.run(); //// forgot here
        }
    } catch (InterruptedException e) {
        // TODO: handle exception
        System.out.println("Main Thread Interrupted.");
    }

    System.out.println("Main Thread Exiting.");
}
}


添加t.run()

我认为问题在于没有调用NewThread类的构造函数。关于构造函数的奇怪部分

  NewThread() {
        <STUFF>
    }

因此,我认为您应该将
public
关键字添加到您的构造函数中,一切都很好。或者将
NewThread
ThreadDemo
类放在同一个包中。

代码发布后就可以了!我得到了你的期望输出


我怀疑您是从另一个代码开始的,在该代码中,您正在用主代码中的另一个变量“t”重写变量“t”。可能您将代码的一部分声明为静态。

正在NewThread类的构造函数中调用start()方法。你检查过了吗?我必须回到这一点上,在实际执行你的代码之后,我得到了你的“预期输出”你确定你有
NewThread t=new NewThread()在main?src对我来说很好。我能够执行你的源代码,得到正确的输出。你确定这里发布的src和你正在测试的是一样的吗?嗯,这很奇怪。。我不知道如何修复它。@Jayamohan我也能够执行这段代码,并使“预期输出”运行良好(具有预期输出)。如果我手动从
main()
方法调用
t.run()
线程有什么意义?@user1947279不仅你的
t.run()
调用在主线程上运行,它还将在for的每个迭代中运行-loop@Appsherif请你检查一下这是否正确,如果正确,请接受答案?
  NewThread() {
        <STUFF>
    }
 NewThread t = new NewThread();