我有一个代码 -
public class ThreadOne
{
public static void main(String[] args)
{
Thread1 th=new Thread1();
Thread1 th2=new Thread1();
th.start();
th2.start();
System.exit(1);
}
}
class Thread1 extends Thread
{
public void run()
{
for(int i=0;i<10;i++)
{
System.out.println(i);
}
}
}
我想知道的是 -
答案 0 :(得分:5)
System.exit(1);
将终止当前运行的 Java虚拟机。当你的程序退出时,你的线程也会死掉。
Thread
是Process
的一部分,如果Process
已退出,则所有主题都将被销毁。
Thread.join()
将一直等到线程运行完毕。
public class ThreadOne
{
public static void main(String[] args)
{
Thread1 th=new Thread1();
Thread1 th2=new Thread1();
th.start();
th2.start();
th.join();
th2.join();
System.exit(1);
}
}
class Thread1 extends Thread
{
public void run()
{
for(int i=0;i<10;i++)
{
System.out.println(i);
}
}
}
答案 1 :(得分:1)
您的代码没有显示任何内容,因为您一旦启动就会使用System.exit()终止该应用。您应该在退出之前等待两个线程完成,例如使用Thread.join()。
默认情况下有一个线程,它执行main()方法,由JVM创建。
答案 2 :(得分:1)
由于线程不像普通的java代码那样执行同步。所以在调用th.start()之后; th2.start();它不会等待run()来完成那就是为什么System.exit(1);打电话给你,你得到了什么。
答案 3 :(得分:1)
你可以等到线程执行使用join.check以下
public class ThreadOne
{
public static void main(String[] args)
{
Thread1 th=new Thread1();
Thread1 th2=new Thread1();
th.start();
th2.start();
try {
th.join();
th2.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.exit(1);
}
}
class Thread1 extends Thread
{
public void run()
{
for(int i=0;i<10;i++)
{
System.out.println(i);
}
}
}
答案 4 :(得分:1)
根据有关system.exit
的java文档Terminates the currently running Java Virtual Machine. The argument serves as a status code; by convention, a nonzero status code indicates abnormal termination.
以上是关于第一个问题的答案。 当JVM启动时,通常会创建一个调用main然后调用其余方法的线程。 希望它有所帮助。
答案 5 :(得分:0)
To see the numbers being printed on screen add the following:
try{
th.join();
th2.join();
}catch(Exception e){
}
After th2.start() in main method.
正如其他人指出的那样,你需要给用户定义的线程一些时间来完成他们的工作,这是通过在相应的线程对象上调用join()来完成的.join()确保调用线程“等待这个线程在“继续前进之前死”。
答案 6 :(得分:0)
你的2个线程由主线程启动,因此有3个线程被调用。但是system.exit()会杀死你的主线程,导致其他2个线程在有机会运行之前终止。
答案 7 :(得分:0)
由于线程与main分开:main中的代码继续执行,System.exit(1);
执行而不考虑线程并关闭程序。