问题描述
- 我下面的代码为啥没有并发问题?
-
两个线程同时操作一个集合,同时删除集合中的元素,为啥没有并发问题?请大神指导下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); } } }
解决方案
为毛会有并发的问题,,你的两个线程又不是完全同步的,,有一个先执行删除,,后一个没有删除的
时间: 2024-08-21 10:29:34