JVM等待一个线程多长时间

问题描述:

嗨每个JAVA开发者, 我有一个关于JVM的简单问题,我想知道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还在等待着吗?

+1

是的,我相信是的。它应该永远运行。 – Jason

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

基于文档,我认为它会永远运行。

就你而言,JVM将继续等待启动的进程终止。

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

  1. 作为每WAITFOR方法 的的Javadoc如果当前线程被另一个线程中断而它是 等待,然后等待结束,并且一个InterruptedException的被抛出。

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

}