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

问题描述

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

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

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

解决方案

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

时间: 2024-08-21 10:29:34

我下面的代码为啥没有并发问题?的相关文章

python-请问为什么这段代码为啥报错

问题描述 请问为什么这段代码为啥报错 我用的Python3.5 没有if这段代码 就能正常访问8000端口 解决方案 像你下面写的那样return加上方括号 另外你所有的 <h1>...<h1> 都应该写成 <h1>...</h1> 解决方案二: 需要是byte数组,你的字符串要先转换为byte数组,再传递 解决方案三: 下面写的那样return加上方括号 另外你所有的 ... 都应该写成 ...

一个我觉得错误的代码为啥出来了正确结果……

问题描述 是这样的,我写了一个让小球在框内上下运动的代码,代码运行的结果确实是让小球在框内上下运动了,但是我觉得这个代码不正确,麻烦大家先看下我的代码,,有点多,麻烦大家了谢谢importjava.awt.*;publicclassMyBall{publicstaticvoidmain(Stringargs[]){Framew=newFrame();w.setSize(300,400);MyPanelmp=newMyPanel();w.add(mp);Threadt=newThread(mp);

重网上下的代码 为啥 改不了连接 改不了代码 帮帮忙谢谢了

问题描述 我一个jsp+struts项目一个连接数据库文件里边的连接改成localhost密码root但是报异常找不到数据库显示还是没改过的地址链接位置:jdbc:mysql://localhost:3306/db_librarySys?user=root&password=root&useUnicode=true异常:链接位置:jdbc:mysql://127.0.0.1:3306/db_librarySys?user=root&password=111&useUnico

两个线程同时操作一个集合,一个线程读,一个线程写。有可能会产生并发问题吗?

问题描述 两个线程同时操作一个集合,一个线程读,一个线程写.有可能会产生并发问题吗? 我下面的代码为啥没有并发问题? 请哪位大神指导下 class Program { public Thread Threadone; public Thread Threadtwo; public event EventHandler EventRun; public static object obj=new object(); ArrayList ListArry = new ArrayList(); pri

并发危险:解决多线程代码中的11个常见的问题

本文将介绍以下内容: 基本并发概念 并发问题和抑制措施 实现安全性的模式 横切概念 本文使用了以下技术: 多线程..NET Framework 并发现象无处不在.服务器端程序长久以来都必须负责处理基本并发编程模型,而随着多核处理器的 日益普及,客户端程序也将需要执行一些任务.随着并发操作的不断增加,有关确保安全的问题也浮现出 来.也就是说,在面对大量逻辑并发操作和不断变化的物理硬件并行性程度时,程序必须继续保持同样级 别的稳定性和可靠性. 与对应的顺序代码相比,正确设计的并发代码还必须遵循一些额

并发环境下HashMap引起的full gc排查

作者:佐井    原文地址 现象 最近上线一个需求,完成需求的过程对代码进行了一次重构.应用发布后半个小时左右,发现一个机器报警,load过高.登陆机器看CPU使用情况,发现load已经正常,看下CPU使用情况,发现有一个核跑满,其他CPU使用率很低.大概一个小时后,其他机器陆续报警,发现同样的问题,紧急回滚应用. 应用运行在16G内存的虚机上,整个JVM11G内存,其中新生代3G,CMS gc,JDK7. 第一反应是JVM可能在进行full gc,因为只有一个线程跑满,其他线程被JVM暂停了.

并发不是并行,它更好!

原文链接,译文链接,译者:雷哥,饶命,校对:李任 现代社会是并行的:多核.网络.云计算.用户负载,并发技术对此有用. Go语言支持并发,它提供了:并发执行(goroutines),同步和消息(channels)和多路并发控制(select). 当Go声称是并发时,人们说:"并发很酷!耶,我可以并行运行了!",但这是个错误的.因为很多人都不了解他们间的差别."我用四个处理器来做质数筛选,但是更慢了." 并发(Concurrency):以可独立执行的进程集合的方式编程(

第八章- 测试并发应用(引言)

声明:本文是< Java 7 Concurrency Cookbook>的第八章, 作者: Javier Fernández González 译者:郑玉婷 8 测试并发应用 章节提要: 监控Lock接口 监控Phaser类 监控执行者框架 监控Fork/Join池 编写有效的日志 FindBugs分析并发代码 配置Eclipse来调试并发代码 配置NetBeans来调试并发代码 MultithreadedTC测试并发代码 介绍 测试应用是很关键的任务.在应用准备好面向最终用户之前,你必须验证

单元性能测试之使用JUnitPerf测试多线程并发

简介: 单元测试和性能测试在测试领域属于要求相对较高的测试活动,也是测试工程师成长.向上发展的反向.单元测试评测我们的代码实现功能的情况,性能测试则企图分析应用程序的性能表现和负载能力.那么"单元性能测试"能做什么?我们可以这样说,单元性能测试以单元测试的形式对代码进行性能测试.单元性能测试像单元测试一样,需要测试人员编写测试代码,但现在关注的不是代码的功能实现情况了,而是想得到被测试代码的性能数据,包括执行方法耗时.多线程并发是否线程安全.内存是否泄漏.是否存在短期循环对象等.单元性