2012-03-30 20 views
-2

我有一個有趣的問題,如果有人可以幫我想出一個解決方案。 我產卵2個獨立的過程中,A和B可以把它們作爲一個排隊等待工作檢測我們所處的過程中的哪個位置?

  1. 一個被填充,做一些
  2. 一個完成並通過移到B
  3. B沒有的東西,光潔度

如何檢測我們在使用Java的過程中的哪個位置?我將如何阻止這個過程,我們在哪裏?

謝謝!

+0

您使用工作「進程」。你的意思是線程嗎? – Gray 2012-03-30 19:15:32

+0

當你說「停止進程」你說的不只是'System.exit(0)'嗎? – Gray 2012-03-30 19:16:24

回答

0

您可以在代碼的不同位置添加一個currentStage變量和更新階段。還保存你的「寄存器」。我的意思是保存你關心的局部變量。序列化對象並將它們放入數據庫中。

然後,如果您退出並重新啓動,則會轉到上次保存的階段並從數據庫中恢復相應的對象。

1

在純Java中,您將擁有可由兩個線程訪問的內存變量,因此它們可以進行通信。您需要使它們同步或使用信號量來確保一次只有一個線程正在修改變量中的信息。

其他語言具有actors的概念,它通過傳遞消息實現更健壯的線程間通信。看看Scala - 它建立在Java之上。或者擁有Scala和Java版本的akka​​庫。

如果你喜歡這個東西,請試試看七週內的七種語言 by Pragmatic Programmers。

+0

+1爲書參考,看起來很有趣 – 2012-03-30 19:24:54

0

要跟蹤過程,您需要另一個線程(C),它可以讀取由A & B輸出的狀態信息,如果它們應該繼續,可以通過A & B詢問。

例如,創建一個ProcessFollower接口與2種方法:

  1. 空隙updateStatus(字符串)
  2. 布爾shouldStop()

C可實現此接口並調用時通過本身,A將對ProcessFollower(C)的引用傳遞給B.每當狀態改變A和B調用updateStatus並且在每次(例如,每次循環迭代)時,它們檢查shouldStop();如果錯誤,他們只是返回或等。

相關問題