以下是我們需要開發的情況。
我們將會有一羣ids通過一位作者不斷插入集合中。 意圖是提醒客戶有關這些特定的ID。
爲此,計劃線程將穿過此集合,整理ID並在此後將該集合「重置」爲空。
我打算爲此使用ConcurrentLinkedQueue。
儘管這會使其線程安全;但有可能「重置」清除尚未提醒的某些ID。
什麼是最好的方式去做這件事?用於存儲和轉發的線程安全集合
0
A
回答
0
您的整理程序線程應在處理它時從隊列中移除每個條目。如果這樣做,則不需要重置隊列,並且不會出現丟失通知的問題。
(如果這沒有意義的你,有你沒有明確解釋最有可能的事情。嘗試添加一些示例代碼......)的「復位」清除掉一些IDS是
0
可能性只有這個問題,所以那是你可以做的是:
附表線程,
首先得到當前大小/沒有在那個特定 時間出現在隊列ID的一個局部變量「 尺寸「,因爲它會隨着插入新元素而改變。 然後迭代ConcurrentLinkedQueue,直到大小爲, ,同時迭代從ConcurrentLinkedQueue中刪除/輪詢元素以收集ID。
以這種方式,您不需要重置ConcurrentLinkedQueue。
0
你可以保持這個越簡單,越會出錯。
我會創建一個容器來管理你的ID集合,只公開你需要的兩個操作。
您的寫入線程需要將條目添加到集合中,並且您的日程安排線程需要批量提取它們。複製讀取策略只需要幾行:
import java.util.ArrayList;
import java.util.List;
public class IdList<T> {
private ArrayList<T> entries = new ArrayList<>();
/**
* Add a notification ID to the collection.
*/
public synchronized void add(T entry) {
entries.add(entry);
}
/**
* Remove the next batch of notification IDs from the collection.
*/
public synchronized List<T> drain() {
ArrayList<T> current = entries;
entries = new ArrayList<>();
return current;
}
}
相關問題
- 1. 存儲在線程安全集合線程中的對象是否安全?
- 2. 鏈接線程安全集合線程安全嗎?
- 3. 用於索引訪問的線程安全集合
- 4. 線程安全的找到並集合
- 5. .NET中的線程安全集合
- 6. 併發集合上通用參數的線程安全問題
- 7. 使用線程安全集合的多個線程
- 8. 使用併發詞典 - 線程安全集合修改
- 9. 成員集合迭代線程安全
- 10. 線程安全地更新Scala集合
- 11. 線程安全訪問靜態集合
- 12. Scala - 可變線程安全集合
- 13. 休眠線程安全集合
- 14. 迭代併發集合時的線程安全
- 15. iOS的存儲和轉發用於離線HTTP POST請求
- 16. 關於線程安全和JPA的EntityManager
- 17. Android的存儲和安全
- 18. CAS(比較和交換)線程安全,而迭代集合?
- 19. 多個用戶可同時訪問的線程安全集合
- 20. 用作池的無序線程安全集合?
- 21. 使用Java期貨的線程安全集合操作
- 22. Azure存儲Blob類型(CloudBlobContainer,CloudBlobClient等)和線程安全
- 23. SQL Server中的觸發器和存儲過程安全性
- 24. 關於線程安全
- 25. 關於線程安全
- 26. 存儲過程表安全
- 27. 關於使用QThreadStorage的線程安全
- 28. 使用JDBC存儲作業時Quartz Scheduler的線程安全性?
- 29. 的ConcurrentHashMap和線程安全
- 30. PHP線程安全和非線程安全的Windows