مزامنة الوصول إلى ArrayList في Java

شرحنا مبدأ التزامن في وقت سابق عندما تحدثنا عن الفرق بين Vector و ArrayList. ArrayList غير متزامن ويجب عدم استخدامه أبدا في بيئة متعددة مؤشرات الترابط بدون التزامن.

هناك طريقتان للمزامنة:
  1. استخدم الطريقة Collections.synchronizedList()
  2. استخدم إصدارا محميا من قائمة المصفوفات:  CopyOnWriteArrayList< / a>< / li>< / ol>

    1) مزامنة ArrayList مع Collections.synchronizedList () < / h2>
    نقطة مهمة يجب ملاحظتها هنا هي أن المكرر يجب أن يكون داخل الكتلة المتزامنة كما هو موضح في المثال أدناه:

    import java.util.ArrayList; 
    import java.util.Collections;
    import java.util.Iterator;
    import java.util.List;

    الفئة العامة ArrayListSynchronized {

    الفراغ الثابت العام الرئيسي (سلسلة [] args) {

    // إنشاء ArrayList< سلسلة> متزامن < br / قائمة >< سلسلة> slist = Collections.synchronizedList (قائمة صفيف جديدة< سلسلة> ());

    //add عناصر إلى ArrayList
    slist.add ("1") ؛
    slist.add("5");
    slist.add("2");
    slist.add("7");

    System.out.println ("تصفح القائمة المتزامنة:");
    متزامن (قائمة) {
    مكرر< سلسلة> المكرر = slist.iterator ();
    بينما (iterator.hasNext ())
    System.out.println (iterator.next ()) ؛
    }
    }
    }
    < / pre>وقت التشغيل:

    < pre class = "prettyprint lang-java" > تصفح القائمة المتزامنة:
    1
    5
    2
    7
    < / pre>

    2) باستخدام CopyOnWriteArrayList< / h2>< / div>
    استيراد java.util.Iterator; 

    الفئة العامة CopyOnWriteArrayList {

    الفراغ الثابت العام الرئيسي (سلسلة [] args) {

    java.util.concurrent.CopyOnWriteArrayList< سلسلة> al =
    java.util.concurrent.CopyOnWriteArrayList الجديد< سلسلة> ();

    // إضافة عناصر إلى ArrayList
    al.add ("دفتر ملاحظات") ؛
    al.add ("kit");
    al.add ("عصا USB") ؛
    al.add ("آلة حاسبة") ؛

    System.out.println ("تصفح القائمة المتزامنة:"); < br / > المكرر< سلسلة> المكرر = al.iterator ();
    بينما (iterator.hasNext ())
    System.out.println (iterator.next ()) ؛
    }
    }
    < / pre>run:

     تصفح القائمة المتزامنة: 
    notebook
    kit
    عصا USB
    آلة حاسبة < / قبل >< / div>