C# ArrayList - Synchronized() 方法
C# ArrayList 的 Synchronized() 方法用于为现有 ArrayList 创建一个同步(线程安全)包装器。此方法确保 ArrayList 上的所有操作在被多线程访问时都是线程安全的。
语法
以下是 C# ArrayList 的语法:Synchronized() 方法 -
public static ArrayList Synchronized(ArrayList list);
参数
此方法接受一个需要同步的 ArrayList。
返回值
此方法返回一个线程安全(同步)的包装器,该包装器用于封装所提供的 ArrayList。
示例 1:创建线程安全的 ArrayList
以下是使用 Synchronized() 方法创建线程安全的 ArrayList 的基本示例 -
using System; using System.Collections; using System.Threading; class Program { static void Main() { ArrayList myList = new ArrayList() { "A", "B", "C" }; // 创建一个同步(线程安全) ArrayList syncList = ArrayList.Synchronized(myList); Console.WriteLine("Original List:"); // 加锁保证线程安全 lock (syncList.SyncRoot) { foreach (var item in syncList) { Console.Write(item + " "); } } Console.WriteLine(); } }
输出
以下是输出 -
Original List: A B C
示例 2:模拟多线程访问
在本例中,我们创建一个 ArrayList。然后,我们用线程安全包装,之后,我们模拟使用多线程向 ArrayList 中添加元素 -
using System; using System.Collections; using System.Threading; class Program { static void Main() { ArrayList myList = new ArrayList() { "A", "B", "C" }; // 创建同步包装器 ArrayList syncList = ArrayList.Synchronized(myList); // 模拟多线程访问 Thread thread1 = new Thread(() => { lock (syncList.SyncRoot) { syncList.Add("D"); Console.WriteLine("Thread 1 added D"); } }); Thread thread2 = new Thread(() => { lock (syncList.SyncRoot) { syncList.Add("E"); Console.WriteLine("Thread 2 added E"); } }); thread1.Start(); thread2.Start(); thread1.Join(); thread2.Join(); // 显示更新后的同步列表 Console.WriteLine("Updated List:"); lock (syncList.SyncRoot) { foreach (var item in syncList) { Console.Write(item + " "); } } } }
输出
以下是输出 -
Thread 1 added D Thread 2 added E Updated List: A B C D E
示例 3:以线程安全的方式添加元素
以下示例创建一个 ArrayList,然后以线程安全的方式将元素添加到 ArrayList 中。使用 Synchronized 方法可使 ArrayList 线程安全 -
using System; using System.Collections; class Example { static void Main() { ArrayList myList = new ArrayList() { 1, 2, 3, 4, 5 }; // 创建一个同步(线程安全)包装器 ArrayList syncList = ArrayList.Synchronized(myList); // 以线程安全的方式添加元素 lock (syncList.SyncRoot) { syncList.Add(6); syncList.Add(7); } Console.WriteLine("Synchronized List:"); lock (syncList.SyncRoot) { foreach (var item in syncList) { Console.Write(item + " "); } } } }
输出
以下是输出 -
Original List: 1 2 3 4 5 Exception: Collection was of a fixed size.