📅  最后修改于: 2023-12-03 15:14:28.172000             🧑  作者: Mango
当多个线程需要同时访问同一个 ArrayList 时,为确保数据一致性可以使用同步包装器来保证线程安全性。本文将介绍如何使用同步包装器创建一个线程安全的 ArrayList。
ArrayList是 C# 中的一个动态数组类,它可以在运行时自动扩展大小。它对于需要执行添加或删除元素操作的数据集合特别有用。下面是创建一个 ArrayList 并添加元素的示例:
using System;
using System.Collections;
class Program
{
static void Main()
{
ArrayList list = new ArrayList();
list.Add("one");
list.Add("two");
list.Add("three");
foreach (object obj in list)
{
Console.WriteLine(obj);
}
}
}
运行输出:
one
two
three
可以使用 ArrayList.Synchronized()
方法来创建一个同步包装器。同步包装器返回线程安全的 ICollection 接口,可以用于在多个线程之间共享数据集合。
下面是创建一个同步的 ArrayList 示例:
using System;
using System.Collections;
class Program
{
static void Main()
{
ArrayList list = new ArrayList();
list.Add("one");
list.Add("two");
list.Add("three");
IList synced = ArrayList.Synchronized(list);
foreach (object obj in synced)
{
Console.WriteLine(obj);
}
}
}
运行输出:
one
two
three
注意在迭代 ArrayList 时需要锁定,如果未锁定,则会出现集合被修改的异常。
通过使用同步包装器,可以确保多个线程使用同一个 ArrayList 时,数据的正确性和一致性。需要注意的是,在同时访问 ArrayList 时,必须对其进行锁定以避免异常。