2012-10-19 57 views
0

我有一個程序需要來自2個來源的命令。 另一個是套接字接口,另一個是事件監聽器。如何正確讓兩個線程更新相同的集合?

建立聽衆後,程序通過調用等待命令:

wait(); 

的命令,到達時使用的同步的方法,該方法後加入到(添加到)結束時一個矢量添加命令調用

notify(); 

當發生這種情況時,執行從等待繼續() - 調用和處理命令向量的內容,從第一個元素開始。爲了測試功能,我在處理方法中添加了一個Thread.sleep(5000),所以處理過程至少需要5秒鐘的時間。

然後我從兩個來源生成命令。

事實證明,這些命令沒有按照它們到達的順序處理!即使來自套接字的命令首先到達,那麼作爲事件到達的那些最終被首先處理。

這是什麼原因造成的?我的設計被破壞了嗎?

+1

如果您張貼了你做這件事的實際代碼,這將更容易(也更可靠)進行診斷。 –

回答

1

對我來說,這聽起來像你想使用BlockingQueue。讓源向它添加命令,並讓處理程序按順序執行它們。

+0

謝謝,這真的有用! – wannabeartist

1

隨着BlockinQueue爲您提供:

  • 沒有阻止,但控制的訪問給發件人,命令的發行
  • 爲消費者提供候車點,能否彈出命令安全
+0

謝謝,你們都對! – wannabeartist

相關問題