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.