2010-01-24 82 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類來實現掛起/恢復機制。

相關問題