CopyOnWriteArraySet
Iki 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 framework
lan dumunung ing paket
java.util.concurrent
.
CopyOnWriteArraySet
Paling cocog kanggo koleksi mung diwaca sing ukurane cukup cilik kanggo disalin yen ana sawetara operasi modifikasi. Contone, sampeyan bisa nggunakake
CopyOnWriteArraySet
kanggo 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
CopyOnWriteArraySet
yaiku diimplementasikake nggunakake
CopyOnWriteArrayList
. Iki tegese
CopyOnWriteArraySet
uga 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
Set
nggunakake 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
CopyOnWriteArraySet
yen
set
cukup 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,
CopyOnWriteArraySet
iki 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;
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);
}
}
}
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
CopyOnWriteArraySet
ngleksanakake
Collection
lan antarmuka
Set
, uga, ditambahake ing JDK 1.5, bebarengan karo implementasine adat liyane saka
Set
'a
EnumSet
,. Iku uga
Set
salah siji sing nggunakake internal
CopyOnWriteArrayList
kanggo kabeh operasi. Mangkono, nuduhake sifat dhasar sing padha ing kelas iki. Amarga ora
SortedSet
, urutan unsur ora dijamin sajrone pengulangan.
-
CopyOnWriteArraySet
Paling cocog kanggo aplikasi ing ngendi:
- Ukuran
Set
's cenderung tetep cilik.
- Operasi
read-only
luwih unggul tinimbang operasi sing ngowahi obyek.
- Sampeyan kudu nyegah interferensi antarane benang sajrone traversal
Set
.
- Kauntungan liyane
CopyOnWriteArraySet
yaiku safety thread. Koleksi iki ndhukung concurrency.
- Operasi mutatif (nambah, ngowahi, mbusak, lsp.) larang amarga biasane mbutuhake nyalin kabeh susunan dhasar.
- Iterator ora ndhukung operasi mbusak mutatif.
- 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
CopyOnWriteArraySet
ing 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
Set
yaiku '', mula iki mbutuhake warisan kabeh beda antarane struktur data kasebut ing Jawa. Contone,
List
urutan unsur penting lan bisa uga ana duplikat. Nalika
Set
unordered, iku ora ngidini duplikasi obyek. Tansah elinga yen
CopyOnWriteArraySet
iki
Collection
kelas khusus. Sampeyan mung kudu digunakake nalika kahanan apik. Ing kasus liyane, sampeyan bisa nggunakake implementasine tujuan umum. Contone,,
HashSet
utawa
LinkedHashSet
kelas koleksi diselarasake. Original:
Carane nggunakake CopyOnWriteArraySet ing Jawa karo Conto
GO TO FULL VERSION