当前位置: 首页 > news >正文

Java线程---并发集合

List

  • CopyOnWriteArrayList

    • 并发修改时保证线程安全

      • 通过ReentrantLock实现多个线程并发修改时的线程安全同步(添加元素的同时,不允许删除)

      • 添加新元素:list.add("")

      • 按照指定下标替换元素:list.set(index, element)

      • 按照指定下标删除元素:list.remove(0)

    • 并发读取

      • 没有加锁,允许多个线程同时并发读取;但是读取时,可能产生脏读(读取的同时,允许写入操作)。

    • CopyOnWrite思想:修改时将原数组内容复制Copy到新数组内,在新数组内修改,然后替换

Set

  • CopyOnWriteArraySet

    • 内部通过一个CopyOnWriteArrayList实现

Queue

  • BlockingQueue阻塞队列

    • 阻塞队列:由两个线程,分别进行读写(task和put)操作;读取时,不允许写入,如果队列为空,则读取线程阻塞;写入时,不允许读取,如果队列已满,则写入线程阻塞;

  • ArrayBlockingQueue
    • 有界队列

  • LinkedBlockingQueue

    • 无界队列

 public class Test02 {public static void main(String[] args) {//自增idAtomicInteger number = new AtomicInteger();//保存生产者的阻塞队列LinkedBlockingQueue<String> queue = new LinkedBlockingQueue<>();//创建线程池ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(6,6,0, TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>());​​//创建1个生产者者线程poolExecutor.execute(()->{//产生10个数据for(int i = 1;i <=10;i++){String data = "数据"+number.getAndIncrement();System.out.println("[生产者]生成:"+data);​try {//保存至阻塞队列queue.put(data);//模拟延时Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}​​});//创建5个消费者线程for(int i= 1; i <= 5; i++){poolExecutor.execute(()->{while(true){try {String data = queue.take();System.out.println("消费者=="+Thread.currentThread().getName()+"获取:"+data);} catch (InterruptedException e) {e.printStackTrace();}}});}}}

Map

  • ConcurrentHashMap

    • JDK1,7

      • 通过分段锁实现线程安全

    • JDK1,8

      • 通过 synchronized+CAS实现线程安全

        • 当产生哈希冲突时,通过synchronized将根节点作为锁,进行线程的同步安全

        • 在没有产生哈希冲突时,通过CAS进行无锁化操作,降低synchronized进行线程同步操作所引发的性能下降


http://www.mrgr.cn/news/30295.html

相关文章:

  • C++ 语言实现读写.csv文件.xls文件
  • C++ 关于基于范围的for循环(C++11) 语法 详解
  • gorm使用注意事项
  • 【计网不挂科】计算机网络第四章< 网络层 >习题库(含答案)
  • 【算力基础】GPU算力计算和其他相关基础(TFLOPS/TOPS/FP32/INT8...)
  • FPGA学习(10)-数码管
  • Git(4):修改git提交日志
  • 3D虚拟商城是什么?有哪些优势?
  • 关于文件操作
  • SQL建表、条件查询、插入数据、更新数据、删除数据、添加字段。
  • 免费开源微信机器人 教程/文档/开发
  • 前端开发规范
  • PCIe扫盲(九)
  • 集运系统核心功能模块:打造高效集运仓日常管理
  • Dubbo与SpringCloud的区别和优缺点
  • 2024/9/19 408大题专训之五段式指令流水线题型总结
  • Android 新增目录怎么加入git
  • 相亲交易系统源码详解与开发指南
  • Machine Learning: A Probabilistic Perspective 机器学习:概率视角 PDF免费分享
  • C++ 第三讲:内存管理
  • 【HTTP】HTTP报文格式和抓包
  • 避免高额开发费用,如何轻松开发类似喜马拉雅的听书平台?
  • 【百日算法计划】:每日一题,见证成长(017)
  • 【初阶数据结构】一文讲清楚 “堆” 和 “堆排序” -- 树和二叉树(二)(内含TOP-K问题)
  • 优积科技模块化建筑新场景——昆山花桥镇司法所办公楼项目
  • 云栖大会今日开幕;YouTube 将推出 AI「一站式服务」;企业需要什么样的AI生产力?|网易数智日报