JVM等待一个线程多长时间

时间:2014-04-06 23:07:56

标签: java jvm

嗨,每个JAVA Developper, 我有一个关于JVM的简单问题,我想知道JVM等待一个线程需要多长时间? 例如,看看这段代码:

public static void main(String[] args) {
 p = Runtime.getRuntime().exec("myShellCommand -p1 v1 -p2 v2");
 p.waitFor();
 System.out.println("End ....:)");
}

假设" myShellCommand"永远奔波,什么事发生呢? JVM还在等待吗?

3 个答案:

答案 0 :(得分:1)

waitFor方法导致当前线程在必要时等待,直到此Process对象表示的进程终止。如果子进程已终止,则此方法立即返回。如果子进程尚未终止,则调用线程将被阻止,直到子进程退出。(来自Javadoc)。

根据文档,我认为它会永远运行。

答案 1 :(得分:0)

在您的情况下,JVM将继续等待已启动的进程终止。

但是,您可以启动另一个"进程监视器"线程,可以等待/休眠一段合理的时间,然后中断主线程

  1. 根据waitFor方法的javadoc 如果当前线程被另一个线程中断  等待,然后等待结束并抛出 InterruptedException

答案 2 :(得分:0)

@Kaoutar

如果您的要求是启动流程,然后在合理的时间段后退出JVM,例如10分钟,然后你可以做这样的事情:

public static void main(String[] args)
{
Thread subProcessThread = new Thread(new Runnable()
                          {
                                @Override
                                public void run()
                                {
                                  Process p;
                                  try
                                  {
                                    p = Runtime.getRuntime().exec("myShellCommand -p1 v1 -p2 v2");
                                    p.waitFor();
                                    System.out.println("End ....:)");
                                  }
                                  catch (IOException e)
                                  {
                                    e.printStackTrace();
                                  }
                                  catch (InterruptedException e)
                                  {
                                    e.printStackTrace();
                                  }
                                }
                          });
subProcessThread.start();
long waitTimeInMillis = 10 * 60 * 1000;
subProcessThread.join(waitTimeInMillis);

}