如何通过示例在Java中使用CopyOnWriteArraySet
CopyOnWriteArraySet是CopyOnWriteArrayList類的弟弟。 這些是專用集合類,這些類是在JDK 1.5上添加的,以及它們最流行的表親ConcurrentHashMap 。 它們是并發收集框架的一部分,位于java.util.concurrent包中。
CopyOnWriteArraySet最適合作為只讀集合,其大小足夠小,以便在發生某些變異操作時進行復制,例如,您可以在應用程序啟動時使用CopyOnWriteArraySet來存儲對象,并允許多個應用程序線程在應用程序生命周期中對其進行訪問。 如果在此期間出現了新的條件或對象,也可以將其添加到此Set中,但會產生創建新數組的費用。 關于CopyOnWriteArraySet要了解的最重要的事情之一是它由CopyOnWriteArrayList支持,這意味著它還共享CopyOnWriteArrayList的所有基本屬性。 要記住的另一件事是該集合類的迭代器不支持remove()操作,嘗試在迭代時刪除一個元素將導致UnSupportedOperationException。 這樣做是為了確保遍歷期間的速度,使用Iterator遍歷此set實現的速度很快,并且不會遇到其他線程的干擾。 迭代器實際上在構造迭代器時依賴于不變的陣列快照。 簡而言之,如果set足夠小,可以在添加,設置或刪除時進行復制,則使用CopyOnWriteArraySet,并且主要目的是讀取偶爾更新的數據。 另外,如果要在迭代過程中刪除元素,請不要使用此Set實現,因為它的迭代器不支持remove(),并拋出java.lang.UnsupportedOperationException,如下所示:
這是我們完整的Java程序,展示了如何使用CopyOnWriteArraySet 。 在我們的示例中,我們使用發布者訂閱者模式來演示其用法。 在啟動過程中訂閱的大多數訂戶,發布者的主要任務是對其進行迭代,并通知他們任何更新。 有時也可以添加和刪除訂戶。 由于我們需要快速遍歷,因此CopyOnWriteArraySet是一個不錯的選擇,尤其是在多線程環境中,其中一個線程可以添加訂戶,而另一個線程正在處理更新。
import java.util.Iterator; import java.util.concurrent.CopyOnWriteArraySet;/*** Java program to demonstrate how to use CopyOnWriteArraySet in Java. Remember,* CopyOnWriteArraySet doesn't support remove() operation.** @author Javin Paul*/ public class CopyOnWriteArraySetDemo{public static void main(String args[]) {Publisher cricNext = new Publisher();SubScriber raj = new SubScriber("RAJ");SubScriber adom = new SubScriber("ADOM");cricNext.addSubscriber(raj);cricNext.addSubscriber(adom);cricNext.notifySubs("FOUR");cricNext.notifySubs("SIX");}}class Publisher {private CopyOnWriteArraySet setOfSubs = new CopyOnWriteArraySet();public void addSubscriber(SubScriber sub) {setOfSubs.add(sub);}public void notifySubs(String score) {Iterator itr = setOfSubs.iterator();while (itr.hasNext()) {SubScriber sub = itr.next();sub.receive(score);//itr.remove(); // not allowed, throws UnsupportedOperationException}} }class SubScriber {private String _name;public SubScriber(String name) {this._name = name;}public void receive(String score) {System.out.printf("[%s] Event received : %s %n", _name, score);} }Output: [RAJ] Event received : FOUR [ADOM] Event received : FOUR [RAJ] Event received : SIX [ADOM]Event received : SIXCopyOnWriteArraySet實現Collection和Set接口,并在JDK 1.5上與另一個特殊的Set實現EnumSet一起添加。 這也是一個使用內部CopyOnWriteArrayList進行所有操作的Set。 因此,它具有該類的相同基本屬性。 它不是SortedSet,因此在迭代過程中不能保證元素的順序。
這就是如何在Java中使用CopyOnWriteArraySet的全部內容。 正如我所說的,它是CopyOnWriteArrayList的弟弟,因此,如果您了解其中之一,則可以使用其他方法。 兩者唯一的區別是一個是List,另一個是Set,但這帶來了Java中Set和List之間的所有區別 。 例如,列表是有序的,而Set是無序的則允許重復,但不允許重復。 始終記住,CopyOnWriteArraySet是一個特殊用途的Collection類,并且僅應在條件允許的情況下使用它,否則請堅持使用通用Set實施,例如HashSet,LinkedHashSet或同步的收集類。
翻譯自: https://www.javacodegeeks.com/2014/06/how-to-use-copyonwritearrayset-in-java-with-example.html
總結
以上是生活随笔為你收集整理的如何通过示例在Java中使用CopyOnWriteArraySet的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 能的部首怎么读 能的部首读音
- 下一篇: 小米集团董事长雷军一行访问武汉,将加大合