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还在等待着吗?
答
如果需要,waitFor方法会导致当前线程等待,直到由此Process对象表示的进程终止。如果子进程已经终止,则此方法立即返回。如果子进程尚未终止,则调用线程将被阻塞,直到子进程退出(来自Javadoc)。
基于文档,我认为它会永远运行。
答
就你而言,JVM将继续等待启动的进程终止。
但是,您可以启动另一个“进程监视器”线程,并且可以等待/休眠一段合理的时间,然后中断主线程。
- 作为每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);
}
是的,我相信是的。它应该永远运行。 – Jason