2010-01-24 34 views
1

我有两个问题:如何阻止在Java子进程和重新启动它们

我需要通过我的主要进程停止子进程,然后重新启动它们在我的主要process.have事情发生后,我能做到这一点?

非常感谢。

+2

你应该把你的问题分成两个主题。 – DerMike 2010-01-24 02:09:26

+1

为了鼓励OP做正确的事情,请不要回答这个问题的第二部分。 – 2010-01-24 02:19:21

+1

到OP - 请编辑您的问题摆脱逻辑无关的第二部分...或要求某人为您做。另外,如果您将其作为一个新问题提出,请尝试提供更多详细信息和示例。我(一)不能解决你问的问题。 – 2010-01-24 02:29:24

回答

0

好吧,这是很久以前,我很困惑,可能忘了寻找答案。谢谢,但实际上有办法把第一部分的关怀和答案是Java远程方法调用或简化RMI: http://en.wikipedia.org/wiki/Java_remote_method_invocation

我要删除我的问题的第二部分,因为我根本不记得是什么我一直在!

0

我不完全确定你在上述文章中的含义 - 我怀疑他们是不同的问题,第二个与Glassfish有关,我可能无法回答。

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

0

对于你的第一部分,在java.util.concurrent.locks有一些类可以帮助你。看看LockSupport

0

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

  • Process情况下,操作系统可能提供支持中止进程,但Java进程API不提供此功能。所以你需要使用非便携的方式(例如JNI/JNA)来实现这一点。

  • Thread情况下,也有叫suspendresume方法,但它们不应该被使用,因为它们根本不安全。 Javadoc非常清楚地说道!

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

相关问题