我有一個程序需要來自2個來源的命令。 另一個是套接字接口,另一個是事件監聽器。如何正確讓兩個線程更新相同的集合?
建立聽衆後,程序通過調用等待命令:
wait();
的命令,到達時使用的同步的方法,該方法後加入到(添加到)結束時一個矢量添加命令調用
notify();
當發生這種情況時,執行從等待繼續() - 調用和處理命令向量的內容,從第一個元素開始。爲了測試功能,我在處理方法中添加了一個Thread.sleep(5000),所以處理過程至少需要5秒鐘的時間。
然後我從兩個來源生成命令。
事實證明,這些命令沒有按照它們到達的順序處理!即使來自套接字的命令首先到達,那麼作爲事件到達的那些最終被首先處理。
這是什麼原因造成的?我的設計被破壞了嗎?
如果您張貼了你做這件事的實際代碼,這將更容易(也更可靠)進行診斷。 –