如何在java中阻止子进程并重新启动它们

时间:2010-01-24 01:30:57

标签: java process operating-system

我有两个问题:

我需要通过我的主进程停止子进程,然后在我的主进程中发生某些事情后再次启动它们。我可以这样做吗?

非常感谢。

4 个答案:

答案 0 :(得分:0)

我不完全确定你在上面的帖子中的意思 - 我怀疑它们是不同的问题,第二个与Glassfish有关,我可能无法回答。

然而,对于第一个我可以,如果你的意思是线程而不是进程--Java有一个wait / notify方法对,组合使用允许你启动n个子线程并等待它们全部完成,然后再继续进行主进程。我认为这是你需要的,而不是从主进程中停止子进程 - 在并发编程中,永远不应该这样做,因为你不能保证你在子进程中的位置。看看:http://www.javamex.com/tutorials/synchronization_wait_notify_4.shtml

答案 1 :(得分:0)

对于您的第一部分,java.util.concurrent.locks中有一些可能对您有帮助的课程。看看LockSupport

答案 2 :(得分:0)

问题第一部分的答案取决于您所谈论的“流程”是Process还是Thread。但在这两种情况下,都没有好办法让不合作的过程“停止”。

  • Process情况下,操作系统可能会提供对挂起进程的支持,但Java Process API不提供此功能。因此,您需要使用非便携方式(例如JNI / JNA)来实现此目的。

  • Thread案例中,有一些名为suspendresume的方法,但不应使用它们,因为它们基本上不安全。 Javadoc说的非常清楚!

因此,如果您实施暂停/恢复机制,则需要您的流程参与/合作。在Thread情况下,您可以使用低级同步原语或使用CyclicBarrier类之类的东西来实现暂停/恢复机制。

答案 3 :(得分:0)

那是很久以前的事情,我真的很困惑,可能忘记寻找答案了。谢谢,但实际上有一种方法来处理第一部分,答案是Java远程方法调用或simpli RMI: http://en.wikipedia.org/wiki/Java_remote_method_invocation

我将删除问题的第二部分,因为我根本不记得我在做什么!