首页 > 其他分享 >保证集合的线程安全问题

保证集合的线程安全问题

时间:2022-12-15 20:11:55浏览次数:43  
标签:Console Thread personList 保证 new 集合 线程

确保集合的线程安全。在开启多线程操作集合的时候,很容易对集合进行增删改查,这样子,集合的访问情况就会变化。

AutoResetEvent:reset()方法.将线程设置为非终止状态,导致线程阻止;set()方法.将线程设置为终止状态,允许一个或多个等待线程继续。两者设置成功均返回true,不成功返回false.

        waitOn():阻止当前线程,直到接收到信号。收到set信号后,只执行一个线程,其他继续等待。

 

 static List<Person> personList = new List<Person>()
            {
                new Person{Name = "Samliy",Age = 29},
                new Person{Name = "Jimmy",Age = 31},
                new Person{Name = "Machial",Age = 28}
            };

        static AutoResetEvent auto = new AutoResetEvent(false);
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Thread thread01 = new Thread(() =>
            {
                auto.WaitOne();
                //foreach (var a in personList)
                //{
                //    Console.WriteLine(a.ToString());
                //    Thread.Sleep(1000);
                //}
          //这里如果换成for循环,则不会报错,如果用foreach则会报错,因为集合修改,foreach会有版本号的判断导致无法遍历
for (int i = 0; i < personList.Count; i++) { Console.WriteLine(personList[i].ToString()); Thread.Sleep(1000); } }); thread01.Start(); Thread thread02 = new Thread(() => { auto.Set(); Thread.Sleep(1000); personList.RemoveAt(2); }); thread02.Start(); }

 

在泛型集合出现之前,非泛型集合一般会采用SyncRoot属性,要保证非泛型集合的线程安全,就得锁住这个属性来实现

但是泛型集合是没有这个属性的,要通过创建一个锁定对象来完成同步任务。

 

标签:Console,Thread,personList,保证,new,集合,线程
From: https://www.cnblogs.com/wen-chen/p/16985875.html

相关文章

  • Java 多线程编程
      ava给多线程编程提供了内置的支持。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。多线程是多任务的一种特别的......
  • 【数据结构实践】从0到1带你利用Python实现自定义集合
    前言集合(简称集)是数学中一个基本概念,我们应该都比较熟悉,不管是生活中,还是数学上,我们都频繁地接触到。集合在数学领域具有无可比拟的特殊重要性。一定范围的,确定的,可以......
  • dubbo的线程模型与线程池策略
    Dubbo默认的底层网络通讯使用的是Netty,服务提供方NettyServer使用两级线程池,其中EventLoopGroup(boss)主要用来接受客户端的链接请求,并把接受的请求分发给EventLoopGrou......
  • [ Linux ] 线程独立栈,线程分离,Linux线程互斥
    1.线程栈我们使用的线程库是用户级线程库(pthread),我们使用lddmythread可以查看mythread的链接信息。因此对于一个线程(tast_struct)都是通过在共享空间内执行pthread_crea......
  • JUC高级篇-第3章 LockSupport与线程中断
    1.线程中断机制什么是中断机制首先,一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止。所以,Thread.stop,Thread.suspend,Thread.resume都已经被废......
  • Java进阶——线程基础
    线程基础1、线程介绍1.1、线程相关概念程序(program):是完成特定任务,用某种语言编写的一组的集合(例如:java代码就是一个程序)进程:是指运行中的程序(比如:我现在使用的Typora)......
  • 【JUC】进程和线程
    目录一、进程1、概述2、进程和线程3、并发与并行4、同步与异步5、新线程的创建5.1使用Thread5.2使用Runnable配合Thread5.3FutureTask配合Thread6、自定义线程类的创建6......
  • 聊聊CPU的发展历程之单核、多核、超线程
    作者:小牛呼噜噜|https://xiaoniuhululu.com计算机内功、JAVA底层、面试、职业成长相关资料等更多精彩文章在公众号「小牛呼噜噜」大家好,我是呼噜噜,在计算机的早期,Int......
  • 集合框架
    java中的集合类似于C++中的STL,里面包含了set、list、map、queue等较常用的数据结构。Java中的集合collection以及与C++的比较​​https://www.2cto.com/kf/201301/......
  • 多线程
    run和start区别​​https://zhidao.baidu.com/question/1496082367158609459.html​​ThreadLocal​​https://www.zhihu.com/question/23089780​​​......