JavaRush /جاوا بلاگ /Random-UR /مثال کے ساتھ جاوا میں CopyOnWriteArraySet کا استعمال کیسے...
Lam-lam
سطح

مثال کے ساتھ جاوا میں CopyOnWriteArraySet کا استعمال کیسے کریں (ترجمہ)

گروپ میں شائع ہوا۔
CopyOnWriteArraySetیہ کلاس کا چھوٹا بھائی ہے CopyOnWriteArrayList۔ یہ JDK 1.5 میں ان کے زیادہ مقبول کزن کے ساتھ شامل کردہ کلاسوں کا ایک خصوصی سیٹ ہے ConcurrentHashMap۔ وہ concurrent collection frameworkپیکیج کا حصہ ہیں اور اس میں واقع ہیں java.util.concurrent۔ جاوا میں CopyOnWriteArraySet کا استعمال کیسے کریں مثال کے ساتھ (ترجمہ) - 1CopyOnWriteArraySetصرف پڑھنے والے مجموعوں کے لیے بہترین موزوں ہے جو کہ سائز میں اتنے چھوٹے ہیں کہ اگر کچھ ترمیمی کارروائیاں ہوتی ہیں تو نقل کی جا سکتی ہیں۔ مثال کے طور پر، آپ 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;

/**
 * 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);
    }
}
آؤٹ پٹ:
[RAJ] Event received : FOUR
[ADOM] Event received : FOUR
[RAJ] Event received : SIX
[ADOM]Event received : SIX

کیا یاد رکھنا ہے۔

CopyOnWriteArraySet' a Collection, Set_ _ یہ بھی ایک ہے جو اپنے تمام کاموں کے لیے اندرونی استعمال کرتا ہے۔ اس طرح، یہ اس کلاس کی ایک جیسی بنیادی خصوصیات کا اشتراک کرتا ہے۔ چونکہ یہ نہیں ہے ، اعادہ کے دوران عناصر کی ترتیب کی ضمانت نہیں ہے۔ SetEnumSetSetCopyOnWriteArrayListSortedSetجاوا میں CopyOnWriteArraySet کا استعمال کیسے کریں مثال کے ساتھ (ترجمہ) - 2
  1. CopyOnWriteArraySetایپلی کیشنز کے لیے بہترین موزوں ہے جہاں:

    • Setکے سائز چھوٹے رہتے ہیں۔
    • آپریشنز read-onlyان آپریشنز سے نمایاں طور پر برتر ہیں جو اشیاء کو تبدیل کرتے ہیں۔
    • آپ کو ٹراورسل کے دوران دھاگوں کے درمیان مداخلت کو روکنا چاہیے Set۔
  2. ایک اور فائدہ CopyOnWriteArraySetدھاگے کی حفاظت ہے۔ یہ مجموعہ ہم آہنگی کی حمایت کرتا ہے۔
  3. متغیر آپریشنز (شامل کرنا، ترمیم کرنا، حذف کرنا وغیرہ) مہنگا ہے کیونکہ ان کے لیے عام طور پر پوری بنیادی صف کو کاپی کرنے کی ضرورت ہوتی ہے۔
  4. تکرار کرنے والے متغیر حذف آپریشن کی حمایت نہیں کرتے ہیں۔
  5. ایٹریٹر کا استعمال کرتے ہوئے ٹراورسل کافی تیز ہے اور اس کے دوران دوسرے تھریڈز کی مداخلت کو خارج کر دیا جاتا ہے۔ کام کرنے کے لیے، تکرار کرنے والے صف کے اسنیپ شاٹ پر انحصار کرتے ہیں جو کہ ایٹریٹر بنانے کے وقت لیا گیا تھا۔
یہ سب CopyOnWriteArraySetجاوا میں استعمال کے بارے میں ہے۔ جیسا کہ میں نے کہا، وہ چھوٹا بھائی ہے CopyOnWriteArrayList۔ لہذا اگر آپ ان میں سے کم از کم ایک کو سمجھتے ہیں، تو آپ دوسرے کو استعمال کر سکتے ہیں۔ فرق صرف یہ ہے کہ ایک List'' ہے اور دوسرا Set'' ہے، لہذا یہ جاوا میں ان ڈیٹا ڈھانچے کے درمیان تمام اختلافات کو وراثت میں شامل کرتا ہے۔ مثال کے طور پر، Listعناصر کی ترتیب اہم ہے اور اس میں نقول شامل ہو سکتے ہیں۔ غیر ترتیب کے باوجود Set، یہ اشیاء کی نقل کی اجازت نہیں دیتا ہے۔ ہمیشہ یاد رکھیں کہ CopyOnWriteArraySetیہ ایک خصوصی Collectionکلاس ہے۔ اسے صرف اس صورت میں استعمال کیا جانا چاہئے جب حالات سازگار ہوں۔ کسی بھی دوسری صورت میں، آپ عام مقصد کے نفاذ کا استعمال کر سکتے ہیں۔ مثال کے طور پر HashSet، LinkedHashSetیا سنکرونائزڈ کلیکشن کلاسز۔ اصل: مثال کے ساتھ جاوا میں CopyOnWriteArraySet کا استعمال کیسے کریں۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION