using System;
using System.Collections.Generic;
using System.Text;
using LogHandler;
using System.Threading;
namespace ConsoleApplication5
{
class Program
{
private static List<string> lstShare = new List<string>();
static void Main(string[] args)
{
Thread th1 = new Thread(thread1);
th1.Start();
Thread th2 = new Thread(thread2);
th2.Start();
}
private static void thread1()
{
//该线程不停地独占列表,并追加数据
while (true)
{
lock (lstShare)
{
lstShare.Add("aaa");
}
}
}
private static void thread2()
{
//该线程是期望创建一个共享列表的独立镜像,然后对镜像进行费时的操作
while (true)
{
try
{
List<string> lstTemp = new List<string>();
lock (lstShare)
{
lstTemp = lstShare;//如果使用这一句来创建镜像,就会发生异常
#region "正确的做法"
//foreach (string item in lstShare)
//{
// lstTemp.Add(item);
//}
#endregion
}
foreach (string item in lstTemp)
{
//do nothing
Thread.Sleep(1);
}
}
catch (System.Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
} |