2 chuanguangwen chuanguangwen 于 2014.07.10 11:53 提问

ArrayList.Synchronized(new ArrayList()) 安全性高了,速度也高了?

public ArrayList al = new ArrayList();
//public ArrayList al = ArrayList.Synchronized(new ArrayList());

    public void ThreadT()
    {
        al.Add(0);
        for (int i = 0; i < 40; ++i)
        {
            Thread td = new Thread(changeA);
            td.Start();
        }

        for (int i = 0; i < 40; ++i)
        {
            Thread td = new Thread(readA);
            td.Start();
        }
    }

    public void readA()
    {
        while (true)
        {
            //lock (al.SyncRoot)
            //{
            Console.WriteLine("==" + al[0]);
            //}
        }
    }
    Random rd = new Random();
    public void changeA()
    {

        while (true)
        {
            //lock(al.SyncRoot)
            //{
            al[0] = rd.Next(50, 100);

            //}
        }
    }

ArrayList.Synchronized(new ArrayList()); 速度为什么会比new ArrayList();速度快很多
如果new ArrayList(); 加上了lock 锁后,速度就差不多快了。
Synchronized内部是采用lock机制, (多线程同时读取,多线程有序单一修改)
而普通ArrayList 没有采用lock 多线程竞争读取修改 速度反而比 同步的慢这是什么道理?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!