chuanguangwen 2014-07-10 03:53
浏览 1035

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 多线程竞争读取修改 速度反而比 同步的慢这是什么道理?

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥15 Arcgis相交分析无法绘制一个或多个图形
    • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
    • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
    • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
    • ¥30 3天&7天&&15天&销量如何统计同一行
    • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
    • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
    • ¥15 vs2019中数据导出问题
    • ¥20 云服务Linux系统TCP-MSS值修改?
    • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)