CopyOnWriteArraySet
یہ کلاس کا چھوٹا بھائی ہے
CopyOnWriteArrayList
۔ یہ JDK 1.5 میں ان کے زیادہ مقبول کزن کے ساتھ شامل کردہ کلاسوں کا ایک خصوصی سیٹ ہے
ConcurrentHashMap
۔ وہ
concurrent collection framework
پیکیج کا حصہ ہیں اور اس میں واقع ہیں
java.util.concurrent
۔
CopyOnWriteArraySet
صرف پڑھنے والے مجموعوں کے لیے بہترین موزوں ہے جو کہ سائز میں اتنے چھوٹے ہیں کہ اگر کچھ ترمیمی کارروائیاں ہوتی ہیں تو نقل کی جا سکتی ہیں۔ مثال کے طور پر، آپ
CopyOnWriteArraySet
ایپلیکیشن کے شروع ہونے پر کسی چیز کو ذخیرہ کرنے کے لیے استعمال کر سکتے ہیں، اور ایپلیکیشن کے پورے لائف سائیکل میں اس چیز تک متعدد دیگر تھریڈز تک رسائی حاصل کر سکتے ہیں۔ اگر اس وقت کے دوران کوئی نئی حالت یا چیز آتی ہے، تو اسے اس میں بھی شامل کیا جا سکتا ہے
Set
، ایک نئی صف بنانے کی قیمت پر۔ جاننے کے لیے سب سے اہم چیزوں میں سے ایک
CopyOnWriteArraySet
یہ ہے کہ اسے استعمال کرکے لاگو کیا جاتا ہے
CopyOnWriteArrayList
۔ اس کا مطلب یہ ہے کہ یہ
CopyOnWriteArraySet
تمام بنیادی خصوصیات کو بھی شیئر کرتا ہے
CopyOnWriteArrayList
۔ یاد رکھنے کی ایک اور اہم بات یہ ہے کہ اس کلیکشن کلاس کے تکرار کرنے والے سپورٹ نہیں کرتے
remove()
۔ انضمام کے دوران کسی عنصر کو ہٹانے کی کوشش کے نتیجے میں آؤٹ لیئر ہو جائے گا
UnsupportedOperationException
۔ یہ رینگنے کے دوران رفتار کو یقینی بنانے کے لیے کیا جاتا ہے۔
Set
ایٹریٹر کا استعمال کرتے ہوئے اس عمل کو عبور کرنا کافی تیز ہے اور دوسرے تھریڈز کی مداخلت سے گریز کرتا ہے۔ کام کرنے کے لیے، تکرار کرنے والے صف کے اسنیپ شاٹ پر انحصار کرتے ہیں جو کہ ایٹریٹر بنانے کے وقت لیا گیا تھا۔ مختصراً، اشیاء کو شامل کرنے، ترتیب دینے یا حذف کرنے کے دوران کاپی کرنے کے لیے کافی چھوٹا ہو
CopyOnWriteArraySet
تو استعمال کریں
set
، اور بنیادی مقصد وقفے وقفے سے اپ ڈیٹ کردہ ڈیٹا کو پڑھنا ہے۔ اس کے علاوہ، اگر آپ تکرار کے دوران عناصر کو ہٹانا چاہتے ہیں، تو اس عمل کو استعمال نہ کریں کیونکہ اس کا تکرار کرنے والا سپورٹ نہیں کرتا
remove()
، اور پھینک دیتا ہے
java.lang.UnsupportedOperationException
، جیسا کہ ذیل میں دکھایا گیا ہے:
[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 کی مثال
یہاں ایک ریڈی میڈ جاوا پروگرام ہے جس کو استعمال کرنے کا طریقہ دکھایا گیا ہے
CopyOnWriteArraySet
۔ ہماری مثال میں، ہم نے پبلشر
-سبسکرائبر پیٹرن کو اس کے استعمال کو ظاہر کرنے کے لیے استعمال کیا۔ زیادہ تر سبسکرائبرز ایپلی کیشن کے آغاز کے دوران سبسکرائب کر لیتے ہیں اور پبلشر کا بنیادی کام ان کی گنتی کرنا اور کسی بھی اپ ڈیٹ کے بارے میں انہیں مطلع کرنا ہے۔ وقتاً فوقتاً سبسکرائبر کے اضافے اور حذف ہو سکتے ہیں۔ چونکہ ہمیں تیز رفتار بائی پاس کی ضرورت ہے،
CopyOnWriteArraySet
یہ ایک اچھا انتخاب ہے، خاص طور پر ملٹی تھریڈ والے ماحول میں جہاں ایک تھریڈ سبسکرائبر کو شامل کر سکتا ہے جبکہ دوسرا تھریڈ اپ ڈیٹس ہینڈل کرتا ہے۔
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);
}
}
آؤٹ پٹ:
[RAJ] Event received : FOUR
[ADOM] Event received : FOUR
[RAJ] Event received : SIX
[ADOM]Event received : SIX
کیا یاد رکھنا ہے۔
CopyOnWriteArraySet
' a
Collection
,
Set
_ _ یہ بھی ایک ہے جو اپنے تمام کاموں کے لیے اندرونی استعمال کرتا ہے۔ اس طرح، یہ اس کلاس کی ایک جیسی بنیادی خصوصیات کا اشتراک کرتا ہے۔ چونکہ یہ نہیں ہے ، اعادہ کے دوران عناصر کی ترتیب کی ضمانت نہیں ہے۔
Set
EnumSet
Set
CopyOnWriteArrayList
SortedSet
-
CopyOnWriteArraySet
ایپلی کیشنز کے لیے بہترین موزوں ہے جہاں:
Set
کے سائز چھوٹے رہتے ہیں۔
- آپریشنز
read-only
ان آپریشنز سے نمایاں طور پر برتر ہیں جو اشیاء کو تبدیل کرتے ہیں۔
- آپ کو ٹراورسل کے دوران دھاگوں کے درمیان مداخلت کو روکنا چاہیے
Set
۔
- ایک اور فائدہ
CopyOnWriteArraySet
دھاگے کی حفاظت ہے۔ یہ مجموعہ ہم آہنگی کی حمایت کرتا ہے۔
- متغیر آپریشنز (شامل کرنا، ترمیم کرنا، حذف کرنا وغیرہ) مہنگا ہے کیونکہ ان کے لیے عام طور پر پوری بنیادی صف کو کاپی کرنے کی ضرورت ہوتی ہے۔
- تکرار کرنے والے متغیر حذف آپریشن کی حمایت نہیں کرتے ہیں۔
- ایٹریٹر کا استعمال کرتے ہوئے ٹراورسل کافی تیز ہے اور اس کے دوران دوسرے تھریڈز کی مداخلت کو خارج کر دیا جاتا ہے۔ کام کرنے کے لیے، تکرار کرنے والے صف کے اسنیپ شاٹ پر انحصار کرتے ہیں جو کہ ایٹریٹر بنانے کے وقت لیا گیا تھا۔
یہ سب
CopyOnWriteArraySet
جاوا میں استعمال کے بارے میں ہے۔ جیسا کہ میں نے کہا، وہ چھوٹا بھائی ہے
CopyOnWriteArrayList
۔ لہذا اگر آپ ان میں سے کم از کم ایک کو سمجھتے ہیں، تو آپ دوسرے کو استعمال کر سکتے ہیں۔ فرق صرف یہ ہے کہ ایک
List
'' ہے اور دوسرا
Set
'' ہے، لہذا یہ جاوا میں ان ڈیٹا ڈھانچے کے درمیان تمام اختلافات کو وراثت میں شامل کرتا ہے۔ مثال کے طور پر،
List
عناصر کی ترتیب اہم ہے اور اس میں نقول شامل ہو سکتے ہیں۔ غیر ترتیب کے باوجود
Set
، یہ اشیاء کی نقل کی اجازت نہیں دیتا ہے۔ ہمیشہ یاد رکھیں کہ
CopyOnWriteArraySet
یہ ایک خصوصی
Collection
کلاس ہے۔ اسے صرف اس صورت میں استعمال کیا جانا چاہئے جب حالات سازگار ہوں۔ کسی بھی دوسری صورت میں، آپ عام مقصد کے نفاذ کا استعمال کر سکتے ہیں۔ مثال کے طور پر
HashSet
،
LinkedHashSet
یا سنکرونائزڈ کلیکشن کلاسز۔ اصل:
مثال کے ساتھ جاوا میں CopyOnWriteArraySet کا استعمال کیسے کریں۔
GO TO FULL VERSION