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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • php dropdownlist,遇到dropdownlist[通俗易懂]

    php dropdownlist,遇到dropdownlist[通俗易懂]ASP.NETDropdownlist错误”CannothavemultipleitemsselectedinaDropDownList.”问题有时,当我们试图指定一个ASP.NETDropdownlist选中的项目时遇到这样的报错”CannothavemultipleitemsselectedinaDropDownList.”使用下面这些代码有可能出现这个报错…

    2022年10月16日
    0
  • 爱的最高境界

    爱的最高境界

    2021年7月26日
    66
  • 深度学习超分辨率重建(总结)[通俗易懂]

    本文为概述,详情翻看前面文章。1.SRCNN:—2,3改进开山之作,三个卷积层,输入图像是低分辨率图像经过双三次(bicubic)插值和高分辨率一个尺寸后输入CNN。图像块的提取和特征表示,特征非线性映射和最终的重建。使用均方误差(MSE)作为损失函数。2.FSRCNN特征提取:低分辨率图像,选取的核9×9设置为5×5。收缩:1×1的卷积核进行降维。非线性映射:用两个串联的3×3的卷积核可以…

    2022年4月1日
    37
  • BACnet协议_bip协议

    BACnet协议_bip协议一、什么是BACnet?BACnet,BuildingAutomationandControlnetworks的简称,即楼宇自动化与控制网络。是用于智能建筑的通信协议。一般楼宇自控设备从功

    2022年8月4日
    5
  • java虚拟机可以运行的文件_虚拟机的网络模型有

    java虚拟机可以运行的文件_虚拟机的网络模型有Java虚拟机中的内存模型?Java虚拟机运行时内存所有的类的实例(不包括局部变量与方法参数)都存储在Java堆中,每条线程有自己的工作内存(Java栈),不同线程之间无法直接访问对方工作内存中的变量。方法区用于存储被虚拟机加载的类信息、常量、static变量等数据,堆用于存储对象实例,比如通过new创建的对象实例就保存在堆中,堆中的对象的由垃圾回收器负责回收。Java栈用于实现方法调用,每次方法调用就对应栈中的一个栈帧,栈帧包含局部变量表、操作数栈、方法接口等于方法相关的信息,栈中的数据当没有引用指向

    2022年9月15日
    1
  • android蓝牙通讯开发(详细)「建议收藏」

    android蓝牙通讯开发(详细)「建议收藏」新建一个工程之后,我们可以先看到界面左边的项目栏,我们可以看到,除了app目录以外,大多数的文件和目录都是自动生成的,我们也不需要对他们进行修改,而app目录之下的文件才是我们工作的重点。下面,我先对

    2022年7月1日
    66

发表回复

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

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