两个线程同时操作一个集合,同时删除集合中的元素,为啥没有并发问题?请大神指导下
class ThreadDemo
{
// public ConcurrentQueue<> ConcurrentQueue
// SyncRoot
public Thread Threadone;//线程1
public Thread Threadtwo;//线程2
public List ListArry;//集合
public event EventHandler DemonEventExe;//当线程执行完成之后执行此事件
ArrayList arraylist = new ArrayList();
static void Main()
{
var threadDemo=new ThreadDemo(100);
threadDemo.Action();
Console.ReadKey();
}
/// <summary>
/// 线程开始激活
/// </summary>
private void Action()
{
Threadone.Start();
Threadtwo.Start();
}
public ThreadDemo(int num)
{
var random = new Random(100000);
ListArry = new List<int>();
for (int i = 0; i < num; i++)
{
var a = random.Next();
ListArry.Add(a);
}
//实例化线程
Threadone = new Thread(Run);
Threadtwo = new Thread(Run);
Threadone.Name = "线程1";
Threadtwo.Name = "线程2";
DemonEventExe += new EventHandler(ThreadDemo_OnNumberClear);
}
private void ThreadDemo_OnNumberClear(object sender, EventArgs e)
{
Console.WriteLine("删除完成");
Threadone.Abort();
Threadtwo.Abort();
}
private void Run()
{
int num = 0;
while (true)
{
//Monitor.Enter(this);
if (ListArry.Count > 0)
{
num = ListArry[0];
if (ListArry.Contains(num))
{
ListArry.Remove(num);
}
Console.WriteLine("线程名:{0}--->删除了{1}", Thread.CurrentThread.Name, num);
}
else
{
DemonEventExe(this,new EventArgs());
//Console.WriteLine("删除完成");
// DemonEventExe += new EventHandler(ThreadDemo_OnNumberClear);
}
// Monitor.Exit(this);
Thread.Sleep(50);
}
}
}
为毛会有并发的问题,,你的两个线程又不是完全同步的,,有一个先执行删除,,后一个没有删除的