JavaRush /Blog Jawa /Random-JV /Cara nggunakake CopyOnWriteArraySet ing Jawa kanthi conto...
Lam-lam
tingkat

Cara nggunakake CopyOnWriteArraySet ing Jawa kanthi conto (terjemahan)

Diterbitake ing grup
CopyOnWriteArraySetIki adik kelas CopyOnWriteArrayList. Iki minangka kumpulan kelas khusus sing ditambahake ing JDK 1.5 bebarengan karo sedulure sing luwih populer ConcurrentHashMap. Padha bagean concurrent collection frameworklan dumunung ing paket java.util.concurrent. Cara nggunakake CopyOnWriteArraySet ing Jawa kanthi conto (terjemahan) - 1CopyOnWriteArraySetPaling cocog kanggo koleksi mung diwaca sing ukurane cukup cilik kanggo disalin yen ana sawetara operasi modifikasi. Contone, sampeyan bisa nggunakake CopyOnWriteArraySetkanggo nyimpen obyek nalika aplikasi diwiwiti, lan duwe sawetara utas liyane ngakses obyek kasebut ing saindhenging siklus urip aplikasi. Yen negara utawa obyek anyar teka ing wektu iki, bisa uga ditambahake menyang iki Set, kanthi biaya nggawe array anyar. Salah sawijining perkara sing paling penting kanggo ngerti CopyOnWriteArraySetyaiku diimplementasikake nggunakake CopyOnWriteArrayList. Iki tegese CopyOnWriteArraySetuga nuduhake kabeh sifat dhasar saka CopyOnWriteArrayList. Liyane sing penting kanggo elinga yaiku iterator kelas koleksi iki ora ndhukung remove(). Nyoba mbusak unsur sajrone integrasi bakal nyebabake outlier UnsupportedOperationException. Iki ditindakake kanggo njamin kacepetan nalika crawling. Nglewati implementasi iki Setnggunakake iterator cukup cepet lan ngindhari gangguan saka utas liyane. Kanggo operate, iterator gumantung ing snapshot saka array sing dijupuk nalika iterator digawe. Ing cendhak, gunakake CopyOnWriteArraySetyen setcukup cilik kanggo nyalin nalika nambah, nyetel, utawa mbusak obyek, lan tujuan utama yaiku maca data sing dianyari sacara sporadis. Uga, yen sampeyan pengin mbusak unsur sajrone pengulangan, aja nggunakake implementasine iki amarga iteratore ora ndhukung remove(), lan mbuwang java.lang.UnsupportedOperationException, kaya sing kapacak ing ngisor iki:
[RAJ] Event received : FOUR
Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.concurrent.CopyOnWriteArrayList$COWIterator.remove(Unknown Source)
    at Publisher.notifySubs(HelloHP.java:43)
    at HelloHP.main(HelloHP.java:23)

CopyOnWriteArraySet conto ing Jawa

Mangkene program Java sing wis siap nuduhake carane nggunakake CopyOnWriteArraySet. Ing conto kita, kita nggunakake pola publisher -subscriber kanggo nduduhake panggunaane. Umume pelanggan langganan nalika diluncurake aplikasi kasebut lan tugas utama penerbit yaiku nyathet lan menehi kabar babagan nganyari apa wae. Penambahan lan pambusakan pelanggan bisa kedadeyan saka wektu kanggo wektu. Amarga kita butuh bypass sing cepet, CopyOnWriteArraySetiki minangka pilihan sing apik, utamane ing lingkungan multi-thread ing ngendi siji thread bisa nambah pelanggan nalika thread liyane nangani nganyari.
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 : SIX

Apa sing kudu dielingi

CopyOnWriteArraySetngleksanakake Collectionlan antarmuka Set, uga, ditambahake ing JDK 1.5, bebarengan karo implementasine adat liyane saka Set'a EnumSet,. Iku uga Setsalah siji sing nggunakake internal CopyOnWriteArrayListkanggo kabeh operasi. Mangkono, nuduhake sifat dhasar sing padha ing kelas iki. Amarga ora SortedSet, urutan unsur ora dijamin sajrone pengulangan. Cara nggunakake CopyOnWriteArraySet ing Jawa kanthi conto (terjemahan) - 2
  1. CopyOnWriteArraySetPaling cocog kanggo aplikasi ing ngendi:

    • Ukuran Set's cenderung tetep cilik.
    • Operasi read-onlyluwih unggul tinimbang operasi sing ngowahi obyek.
    • Sampeyan kudu nyegah interferensi antarane benang sajrone traversal Set.
  2. Kauntungan liyane CopyOnWriteArraySetyaiku safety thread. Koleksi iki ndhukung concurrency.
  3. Operasi mutatif (nambah, ngowahi, mbusak, lsp.) larang amarga biasane mbutuhake nyalin kabeh susunan dhasar.
  4. Iterator ora ndhukung operasi mbusak mutatif.
  5. Traversal nggunakake iterator cukup cepet lan sajrone interferensi benang liyane ora kalebu. Kanggo operate, iterator gumantung ing snapshot saka array sing dijupuk nalika iterator digawe.
Iku kabeh babagan panggunaan CopyOnWriteArraySeting Jawa. Kaya sing dakkandhakake, dheweke adhine CopyOnWriteArrayList. Dadi yen sampeyan ngerti paling ora siji, sampeyan bisa nggunakake liyane. Bentenane mung siji yaiku List'' lan liyane Setyaiku '', mula iki mbutuhake warisan kabeh beda antarane struktur data kasebut ing Jawa. Contone, Listurutan unsur penting lan bisa uga ana duplikat. Nalika Setunordered, iku ora ngidini duplikasi obyek. Tansah elinga yen CopyOnWriteArraySetiki Collectionkelas khusus. Sampeyan mung kudu digunakake nalika kahanan apik. Ing kasus liyane, sampeyan bisa nggunakake implementasine tujuan umum. Contone,, HashSetutawa LinkedHashSetkelas koleksi diselarasake. Original: Carane nggunakake CopyOnWriteArraySet ing Jawa karo Conto
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION