C# 如何避免异常”集合已修改;可能无法执行枚举操作。“

C# 如何避免异常”集合已修改;可能无法执行枚举操作。“

using System;

using System.Collections.Generic;

using System.Text;

using LogHandler;

using System.Threading;

namespace ConsoleApplication5

{

    class Program

    {

        private static List<string> lstShare = new List<string>();

        static void Main(string[] args)

        {

 

            Thread th1 = new Thread(thread1);

            th1.Start();

            Thread th2 = new Thread(thread2);

            th2.Start();

 

 

        }

 

        private static void thread1()

        {

            //该线程不停地独占列表,并追加数据

            while (true)

            {

                lock (lstShare)

                {

                    lstShare.Add(“aaa”);

                }

            }

        }

 

        private static void thread2()

        {

            //该线程是期望创建一个共享列表的独立镜像,然后对镜像进行费时的操作

            while (true)

            {

                try

                {

                    List<string> lstTemp = new List<string>();

                    lock (lstShare)

                    {

                        lstTemp = lstShare;//如果使用这一句来创建镜像,就会发生异常

 

                        #region “正确的做法”

                        //foreach (string item in lstShare)

                        //{

                        //    lstTemp.Add(item);

                        //}

                        #endregion

                    }

 

                    foreach (string item in lstTemp)

                    {

                        //do nothing

                        Thread.Sleep(1);

                    }

                }

                catch (System.Exception ex)

                {

                    Console.WriteLine(ex.Message);

                }

 

            }

        }

    }

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110247.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • golang2021激活码_通用破解码「建议收藏」

    golang2021激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    69
  • Spring contextConfigLocation[通俗易懂]

    Spring contextConfigLocation[通俗易懂]SpringcontextConfigLocation  2012-04-0201:20:56|  分类: Spring |  标签:spring工作积累  |字号 订阅spring如何使用多个xml配置文件 1,在web.xml中定义contextConfigLocation参数.spring会使用这个参数加载.所有逗号分割的xml.如果没有这

    2022年6月14日
    29
  • 批处理 for命令_文件批处理命令

    批处理 for命令_文件批处理命令对所有的批处理初学者来说,for的应用是最难理解以及掌握的。本文由浅入深,为大家专门讲解for的用法,希望大家喜欢。首先应该明确的是,for不是一个简单的命令,它的用法比较复杂,它还可以带四个参数(/L/D/R/F),其中:/L和/F参数是最经常用到的。当然,它本身也可以不带参数,下面我们通过具体的例子来讲解for的运用。一、不带参数的for:@echo

    2022年10月12日
    2
  • jvm jstat_预处理命令是什么意思

    jvm jstat_预处理命令是什么意思作用JVMstatisticsMonitoring,用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。使用依旧先看一下使用帮助~ᐅjstat-helpUsage:jstat-help|-optionsjstat-<option>[-t][-h<lines&…

    2025年10月28日
    4
  • CentOS7配置LLDP服务

    CentOS7配置LLDP服务作者:BK运维团队成员官方链接:https://vincentbernat.github.io/lldpd/usage.html官方图片:什么是lldpdLLDP可以让你准确的知道服务器所连接的交换机端口号。LLDP是一种工业标准协议,用于取代EDP或CDP等专用链路层协议。LLDP的目标是提供一个inter-vendor兼容机制,向相邻网络设备发送链路层通知。lldpd是一个L…

    2022年5月28日
    109
  • 数据库查询优化——Mysql索引

    数据库查询优化——Mysql索引

    2020年11月12日
    297

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号