مزامنة الوصول إلى ArrayList في Java
شرحنا مبدأ التزامن في وقت سابق عندما تحدثنا عن الفرق بين Vector و ArrayList. ArrayList غير متزامن ويجب عدم استخدامه أبدا في بيئة متعددة مؤشرات الترابط بدون التزامن.هناك طريقتان للمزامنة:
- استخدم الطريقة Collections.synchronizedList()
- استخدم إصدارا محميا من قائمة المصفوفات: 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>