JavaRush /Java Blog /Random-ID /Cara menggunakan CopyOnWriteArraySet di Java dengan conto...
Lam-lam
Level 30

Cara menggunakan CopyOnWriteArraySet di Java dengan contoh (terjemahan)

Dipublikasikan di grup Random-ID
CopyOnWriteArraySetIni adalah adik laki-laki di kelasnya CopyOnWriteArrayList. Ini adalah serangkaian kelas khusus yang ditambahkan di JDK 1.5 bersama dengan sepupunya yang lebih populer ConcurrentHashMap. Mereka adalah bagian dari concurrent collection frameworkdan terletak di dalam paket java.util.concurrent. Cara menggunakan CopyOnWriteArraySet di Java dengan contoh (terjemahan) - 1CopyOnWriteArraySetPaling cocok untuk koleksi baca-saja yang ukurannya cukup kecil untuk disalin jika terjadi beberapa operasi modifikasi. Misalnya, Anda dapat menggunakan CopyOnWriteArraySetuntuk menyimpan objek saat aplikasi dimulai, dan meminta beberapa thread lain mengakses objek tersebut sepanjang siklus hidup aplikasi. Jika keadaan atau objek baru tiba pada waktu ini, keadaan atau objek tersebut juga dapat ditambahkan ke keadaan atau objek ini Set, dengan biaya pembuatan larik baru. Salah satu hal terpenting yang perlu diketahui CopyOnWriteArraySetadalah penerapannya menggunakan CopyOnWriteArrayList. Ini berarti ia CopyOnWriteArraySetjuga berbagi semua properti dasar CopyOnWriteArrayList. Hal penting lainnya yang perlu diingat adalah bahwa iterator kelas koleksi ini tidak mendukung remove(). Mencoba menghapus elemen selama integrasi akan menghasilkan outlier UnsupportedOperationException. Hal ini dilakukan untuk memastikan kecepatan saat merangkak. Melintasi implementasi ini Setmenggunakan iterator cukup cepat dan menghindari gangguan dari thread lain. Untuk beroperasi, iterator mengandalkan snapshot dari array yang diambil saat iterator dibuat. Singkatnya, gunakan CopyOnWriteArraySetjika setcukup kecil untuk disalin saat menambah, mengatur, atau menghapus objek, dan tujuan utamanya adalah untuk membaca data yang diperbarui secara sporadis. Selain itu, jika Anda ingin menghapus elemen selama iterasi, jangan gunakan implementasi ini karena iteratornya tidak mendukung remove(), dan throws java.lang.UnsupportedOperationException, seperti yang ditunjukkan di bawah ini:
[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)

Contoh CopyOnWriteArraySet di Java

Berikut adalah program Java siap pakai yang menunjukkan cara menggunakan CopyOnWriteArraySet. Dalam contoh kami, kami menggunakan pola penerbit -pelanggan untuk mendemonstrasikan penggunaannya. Sebagian besar pelanggan berlangganan selama peluncuran aplikasi dan tugas utama penerbit adalah menghitung mereka dan memberi tahu mereka tentang pembaruan apa pun. Penambahan dan penghapusan pelanggan dapat terjadi sewaktu-waktu. Karena kita memerlukan bypass yang cepat, CopyOnWriteArraySetini adalah pilihan yang baik, terutama dalam lingkungan multi-thread di mana satu thread dapat menambahkan pelanggan sementara thread lain menangani pembaruan.
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);
    }
}
Keluaran:
[RAJ] Event received : FOUR
[ADOM] Event received : FOUR
[RAJ] Event received : SIX
[ADOM]Event received : SIX

Apa yang perlu diingat

CopyOnWriteArraySetmengimplementasikan antarmuka Collectionand Set, serta, ditambahkan di JDK 1.5, bersama dengan implementasi khusus lainnya dari Set'a, EnumSet. Itu juga Setsalah satu yang menggunakan internal CopyOnWriteArrayListuntuk semua operasinya. Dengan demikian, ia memiliki sifat dasar yang sama dengan kelas ini. Karena tidak SortedSet, urutan elemen tidak dijamin selama iterasi. Cara menggunakan CopyOnWriteArraySet di Java dengan contoh (terjemahan) - 2
  1. CopyOnWriteArraySetPaling cocok untuk aplikasi di mana:

    • Ukurannya Setcenderung tetap kecil.
    • Operasi read-onlysecara signifikan lebih unggul daripada operasi yang memodifikasi objek.
    • Anda harus mencegah interferensi antar thread selama traversal Set.
  2. Keuntungan lainnya CopyOnWriteArraySetadalah keamanan benang. Koleksi ini mendukung konkurensi.
  3. Operasi mutatif (menambah, mengubah, menghapus, dll.) mahal karena biasanya memerlukan penyalinan seluruh array yang mendasarinya.
  4. Iterator tidak mendukung operasi penghapusan mutatif.
  5. Traversal menggunakan iterator cukup cepat dan selama itu gangguan dari thread lain tidak termasuk. Untuk beroperasi, iterator mengandalkan snapshot dari array yang diambil saat iterator dibuat.
Itu semua tentang penggunaan CopyOnWriteArraySetdi Java. Seperti yang saya katakan, dia adalah adik laki-laki CopyOnWriteArrayList. Jadi jika Anda memahami setidaknya salah satunya, Anda bisa menggunakan yang lain. Satu-satunya perbedaan adalah yang satu adalah List'' dan yang lainnya Setadalah '', jadi ini memerlukan pewarisan semua perbedaan antara struktur data ini di Java. Misalnya, Listurutan elemen penting dan mungkin mengandung duplikat. Meskipun Settidak berurutan, ini tidak memungkinkan duplikasi objek. Ingatlah selalu bahwa CopyOnWriteArraySetini adalah kelas khusus Collection. Ini hanya boleh digunakan ketika kondisinya mendukung. Dalam kasus lain, Anda dapat menggunakan implementasi tujuan umum. Misalnya, HashSet, LinkedHashSetatau kelas koleksi yang disinkronkan. Asli: Cara menggunakan CopyOnWriteArraySet di Java dengan Contoh
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION