ArrayList.Synchronized(ArrayList) स्थैतिक मेथड निर्दिष्ट ArrayList के चारों ओर एक थ्रेड-सेफ (सिंक्रनाइज़्ड) रैपर लौटाता है। रैपर सभी ऑपरेशन्स पर लॉक करता है। मूल ArrayList असिंक्रनाइज़्ड रहता है।
उदाहरण 1: असिंक्रनाइज़्ड ArrayList
using System;
using System.Collections;
public class Demo
{
public static void Main()
{
ArrayList arrList = new ArrayList();
arrList.Add("AB");
arrList.Add("CD");
arrList.Add("EF");
arrList.Add("GH");
arrList.Add("IJ");
arrList.Add("KL");
Console.WriteLine("ArrayList elements...");
foreach (string str in arrList)
{
Console.WriteLine(str);
}
Console.WriteLine("ArrayList is synchronized? = " + arrList.IsSynchronized);
}
}
आउटपुट
ArrayList elements... AB CD EF GH IJ KL ArrayList is synchronized? = False
उदाहरण 2: सिंक्रनाइज़्ड रैपर बनाना
using System;
using System.Collections;
public class Demo
{
public static void Main()
{
ArrayList arrList = new ArrayList();
arrList.Add("AB");
arrList.Add("CD");
arrList.Add("EF");
arrList.Add("GH");
arrList.Add("IJ");
arrList.Add("KL");
Console.WriteLine("ArrayList elements...");
foreach (string str in arrList)
{
Console.WriteLine(str);
}
Console.WriteLine("ArrayList is synchronized? = " + arrList.IsSynchronized);
ArrayList arrList2 = ArrayList.Synchronized(arrList);
Console.WriteLine("ArrayList is synchronized? = " + arrList2.IsSynchronized);
}
}
आउटपुट
ArrayList elements... AB CD EF GH IJ KL ArrayList is synchronized? = False ArrayList is synchronized? = True
Synchronized रैपर प्रत्येक ऑपरेशन पर लॉक करता है। एन्यूमरेशन के लिए, पूरे एन्यूमरेशन के दौरान मैन्युअल रूप से lock(arrList.SyncRoot) का उपयोग करें। आधुनिक कोड में List<T> के साथ मैन्युअल लॉकिंग या ConcurrentBag<T>/ConcurrentQueue<T> पसंद किया जाता है।