簡體   English   中英

如何在Java中阻止子進程並重新啟動它們

[英]How to block child processes in java and restarting them

我有兩個問題:

我需要在主流程中停止子流程,然后在主流程中發生某些事情后再次啟動它們。我可以這樣做嗎?

非常感謝。

好吧,很久以前,我真的很困惑,可能忘記了尋找答案。 謝謝,但是實際上有一種方法可以照顧到第一部分,答案是Java遠程方法調用或simpli RMI: http : //en.wikipedia.org/wiki/Java_remote_method_invocation

我將刪除問題的第二部分,因為我根本不記得自己在做什么!

我不完全確定您在上述文章中的意思-我懷疑它們是不同的問題,第二個問題與Glassfish有關,我可能無法回答。

但是,對於第一個,我可以用線程而不是進程來表示-Java有一個wait / notify方法對,結合使用可以啟動n個子線程並等待它們全部完成后再繼續執行主進程。 我認為這是您所需要的,而不是從主進程中停止子進程-在並發編程中,這絕不應該執行,因為您不能保證自己在子進程中所處的位置。 看看: http : //www.javamex.com/tutorials/synchronization_wait_notify_4.shtml

在您的第一部分中, java.util.concurrent.locks中的一些類可能會對您有所幫助。 看看LockSupport

問題第一部分的答案取決於您正在談論的“流程”是Process還是Thread 但是,在兩種情況下,都沒有導致“不合作”過程“停止”的好方法。

  • Process情況下,OS可能會提供對掛起進程的支持,但是Java Process API不提供此功能。 因此,您需要采用非便攜式方式(例如JNI / JNA)來實現此目的。

  • Thread情況下,有一些方法稱為suspendresume ,但不應使用它們,因為它們從根本上來說是不安全的。 Javadoc說得很清楚!

因此,如果實現暫停/恢復機制,則需要您的流程參與/合作。 Thread情況下,您可以使用低級同步原語或使用類似CyclicBarrier類的類來實現暫停/恢復機制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM