刪除元素,我需要某種形式,將添加新的元素和刪除新元素同步隊列:如何同步添加元素,並從隊列
同步應該是添加元素,刪除元素和之間添加/刪除方法。
我想到的一些選項:
1.找一個線程安全的隊列實現,這意味着訪問隊列無論哪個方法將調用將阻止它 - >也許不是那麼聰明..
2.在一些鎖對象上做一些包含add/remove元素方法的synchronize
.-->這個解決方案看起來有點難看。
您對此有何看法?
刪除元素,我需要某種形式,將添加新的元素和刪除新元素同步隊列:如何同步添加元素,並從隊列
同步應該是添加元素,刪除元素和之間添加/刪除方法。
我想到的一些選項:
1.找一個線程安全的隊列實現,這意味着訪問隊列無論哪個方法將調用將阻止它 - >也許不是那麼聰明..
2.在一些鎖對象上做一些包含add/remove元素方法的synchronize
.-->這個解決方案看起來有點難看。
您對此有何看法?
我需要某種形式,將添加新的元素和刪除新元素同步隊列:
您應該使用BlockingQueue
(例如ArrayBlockingQueue
),接受所有同步的護理爲你。您呼叫queue.add(...)
添加到隊列中,另一個線程將調用take()
從隊列中刪除項目。
或者:3.使用線程安全的BlockingQueues之一,使用無鎖算法並具有阻塞和非阻塞方法。
對於聰明而又不那麼難看的解決方案,您需要在某些包裝中編寫自己的線程安全操作,但不要使用synchronized,而應使用ReadWriteLocks。 無論如何,其他不錯的選擇是谷歌番石榴庫。你沒有提到任何綁定/阻塞操作的需要,所以我沒有看到BlockingQueue作爲不錯的選擇。我推薦Guava的ConcurrentLinkedQueue,它是一個基於鏈接節點的無限線程安全隊列。
希望這會有所幫助。對於進一步的細節探討這個鏈接: http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Queues.html
的ConcurrentLinkedQueue頁: http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true
只使用同步(YOUR_QUEUE_OBJECT){你的代碼添加和移除} – Wajahat