JavaRush /Java Blogu /Random-AZ /Nümunə ilə Java-da CopyOnWriteArraySet-dən necə istifadə ...
Lam-lam
Səviyyə

Nümunə ilə Java-da CopyOnWriteArraySet-dən necə istifadə etmək olar (tərcümə)

Qrupda dərc edilmişdir
CopyOnWriteArraySetBu sinifin kiçik qardaşıdır CopyOnWriteArrayList. Bunlar daha populyar əmisi oğlu ilə birlikdə JDK 1.5-ə əlavə edilmiş ixtisaslaşdırılmış siniflər dəstidir ConcurrentHashMap. Onlar paketin bir hissəsidir concurrent collection frameworkvə paketdə yerləşirlər java.util.concurrent. Java-da CopyOnWriteArraySet-dən necə istifadə etmək olar (tərcümə) - 1CopyOnWriteArraySetBəzi dəyişdirmə əməliyyatları baş verərsə, kopyalanacaq ölçüdə kifayət qədər kiçik olan yalnız oxunaqlı kolleksiyalar üçün ən uyğundur. Məsələn, siz CopyOnWriteArraySetproqram başlayanda obyekti saxlamaq üçün istifadə edə və tətbiqin həyat dövrü ərzində bir çox digər mövzuların həmin obyektə daxil olmasına icazə verə bilərsiniz. SetBu müddət ərzində yeni vəziyyət və ya obyekt gəlirsə, o , yeni massiv yaratmaq bahasına bu birinə əlavə edilə bilər . Bilmək lazım olan ən vacib şeylərdən biri CopyOnWriteArraySetdə onun istifadə edərək həyata keçirilməsidir CopyOnWriteArrayList. Bu o deməkdir ki, o CopyOnWriteArraySet, həm də -nin bütün əsas xüsusiyyətlərini paylaşır CopyOnWriteArrayList. Xatırlamaq lazım olan başqa bir vacib şey odur ki, bu kolleksiya sinfinin iteratorları remove(). İnteqrasiya zamanı elementi silmək cəhdi kənar göstərici ilə nəticələnəcək UnsupportedOperationException. Bu, tarama zamanı sürəti təmin etmək üçün edilir. Bir iteratordan istifadə edərək bu tətbiqi keçmək Setkifayət qədər sürətlidir və digər mövzulardan müdaxilənin qarşısını alır. İşləmək üçün iteratorlar iterator yaradılan zaman çəkilmiş massivin snapshotına etibar edirlər. Bir sözlə, obyektləri əlavə edərkən, quraşdırarkən və ya silərkən kopyalamaq üçün kifayət qədər kiçik CopyOnWriteArraySetolduqda istifadə edin setvə əsas məqsəd arabir yenilənən məlumatları oxumaqdır. Həmçinin, iterasiya zamanı elementləri silmək istəyirsinizsə, bu tətbiqdən istifadə etməyin, çünki onun iteratoru dəstəkləmir remove()java.lang.UnsupportedOperationExceptionaşağıda göstərildiyi kimi atır:
[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)

Java-da CopyOnWriteArraySet nümunəsi

Budur, necə istifadə olunacağını göstərən hazır Java proqramı CopyOnWriteArraySet. Nümunəmizdə onun istifadəsini nümayiş etdirmək üçün publisher -subscriber modelindən istifadə etdik. Abunəçilərin əksəriyyəti tətbiqin işə salınması zamanı abunə olur və naşirin əsas vəzifəsi onları sadalamaq və hər hansı yeniliklər barədə xəbərdar etməkdir. Abunəçilərin əlavə və silinmələri vaxtaşırı baş verə bilər. Sürətli yan keçidə ehtiyacımız olduğundan, CopyOnWriteArraySetbu, xüsusilə bir ipin abunəçi əlavə edə bildiyi, digər mövzunun isə yeniləmələri idarə edə bildiyi çox yivli mühitdə yaxşı seçimdir.
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);
    }
}
Çıxış:
[RAJ] Event received : FOUR
[ADOM] Event received : FOUR
[RAJ] Event received : SIX
[ADOM]Event received : SIX

Nə xatırlamaq lazımdır

CopyOnWriteArraySetCollectionvə interfeyslərini Set, eləcə də JDK 1.5-də əlavə edilmiş başqa bir Set'a, EnumSet. Həm də bütün əməliyyatları üçün Setdaxili istifadə edən biridir . CopyOnWriteArrayListBeləliklə, bu sinfin eyni əsas xüsusiyyətlərini paylaşır. Olmadığına görə SortedSet, iterasiya zamanı elementlərin sırasına zəmanət verilmir. Java-da CopyOnWriteArraySet-dən necə istifadə etmək olar (tərcümə) - 2
  1. CopyOnWriteArraySetTətbiqlər üçün ən uyğundur:

    • Set'ların ölçüləri kiçik qalmağa meyllidir.
    • Əməliyyatlar read-onlyobyektləri dəyişdirən əməliyyatlardan əhəmiyyətli dərəcədə üstündür.
    • Kəsmə zamanı iplər arasında müdaxilənin qarşısını almalısınız Set.
  2. Digər bir üstünlük CopyOnWriteArraySetiplik təhlükəsizliyidir. Bu kolleksiya paralelliyi dəstəkləyir.
  3. Mutativ əməliyyatlar (əlavə etmək, dəyişdirmək, silmək və s.) baha başa gəlir, çünki onlar adətən bütün əsas massivin surətini çıxarmağı tələb edir.
  4. İteratorlar mutativ silmə əməliyyatını dəstəkləmir.
  5. Bir iteratordan istifadə edərək keçid olduqca sürətlidir və bu zaman digər iplərin müdaxiləsi istisna olunur. İşləmək üçün iteratorlar iterator yaradılan zaman çəkilmiş massivin snapshotına etibar edirlər.
Bütün bunlar CopyOnWriteArraySetJava-da istifadəyə aiddir. Dediyim kimi o, kiçik qardaşdır CopyOnWriteArrayList. Beləliklə, onlardan ən azı birini başa düşsəniz, digərindən istifadə edə bilərsiniz. Yeganə fərq, birinin List'', digərinin isə Set'' olmasıdır, buna görə də bu, Java-da bu məlumat strukturları arasındakı bütün fərqlərin miras alınmasını tələb edir. Məsələn, Listelementlərin sırası vacibdir və dublikatları ehtiva edə bilər. Sıralanmamış halda Set, obyektlərin təkrarlanmasına icazə vermir. CopyOnWriteArraySetHəmişə bunun xüsusi bir sinif olduğunu unutmayın Collection. Yalnız əlverişli şərtlər olduqda istifadə edilməlidir. Hər hansı digər halda, ümumi təyinatlı tətbiqlərdən istifadə edə bilərsiniz. Məsələn, HashSet, LinkedHashSetvə ya sinxronlaşdırılmış kolleksiya sinifləri. Orijinal: Nümunə ilə Java-da CopyOnWriteArraySet-dən necə istifadə etmək olar
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION