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();