我下面的代码为啥没有并发问题?

两个线程同时操作一个集合,同时删除集合中的元素,为啥没有并发问题?请大神指导下

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);
        }
    }
}

为毛会有并发的问题,,你的两个线程又不是完全同步的,,有一个先执行删除,,后一个没有删除的