并发容器(一):普通容器&&同步容器&&并发容器

2023-11-02

前言

之前我们学习过了集合,并发编程,现在我们来学习并发容器,在并发编程中,经常听到Java集合类,同步容器,并发容器,那么他们之间有哪些分类,优劣呢,我们先把这个框架给分清楚了,这样后面学习的时候不会乱。

集合容器

大家熟知的集合类ArrayList,LinkedList,HashMap这些容器这些容器都是非线程安全的,如果多个线程并发访问这些容器时,会出现问题。因此,在编写程序时,如果是在多线程环境下,必需要求程序员手动地在任何访问到这些容器的地方进行同步处理,但是这样使用起来十分麻烦。

同步容器

基于集合容器出现的问题,Java给用户提供了同步容器。
可以简单理解为通过synchronized来实现同步的容器。主要分类为:
1.Vector
2.Stack
3.HashTable
4.Collections.synchronized方法生成
举个例子:
在这里插入图片描述
在这里插入图片描述
我们可以看到,这些容器实现线程安全的方式就是将它们的封装起来,并在需要同步的方法上添加关键字synchronized。
只是,这样做的代价是削弱了并发性,当多个线程共同竞争容器级的锁时,吞吐量就会降低。

并发容器

为了解决同步容器的性能问题,并发容器出现了。
Java.util.concurrent包下提供了多种并发容器。
并发容器是专门针对多线程并发设计的,使用了锁分段技术,只对操作的位置进行同步操作,其他没有操作的位置可以被其他线程访问,提高了程序的吞吐量。
采用了CAS算法和部分代码使用synchronized锁保证线程安全。

综上来说:
1.单线程中操作普通容器时,代码都是串行执行,同一时刻只能put或get一个数据到容器中
2.多线程中操作同步容器时,多个线程排队去执行,同一时刻也是只能put或get一个数据到同步容器中
3.在多线程中操作并发容器时,可以多个线程同时去执行,同一时刻可以有多个线程去put或get多个数据到并发容器中

结构上来说呢JUC安全集合有三大类:Blocking类,CopyOnWrite类,Concurrent类,后面我们会对每个类里面重点的集合进行分析。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

并发容器(一):普通容器&&同步容器&&并发容器 的相关文章

随机推荐

  • 分布式场景下基于拍卖算法的边缘智能节点任务分配

    摘 要 针对分布式场景下的边缘智能节点任务分配问题 构建了多类型的任务分配模型用于描述边缘智能节点与任务之间的关系 提出了一种基于拍卖算法的任务分配方法 智能边缘节点以动态拍卖的方式获取各自任务 基于拍卖算法的任务分配 智能边缘节点分为拍卖
  • iPad断触问题,iPencil正常,手指断触11个简便解决方法

    最开始上网搜 发现很多人都要此类情况 然后有人说是贴膜 带壳 人体导致的静电 有人说是iPad产品缺陷 有人说是接触不良 这里提供几个简便方法 有人换了三口插头 mac的充电线 链接地线可以放电 可以起到一定作用 简便方法1 一手摸pad屏
  • vue3中script setup获取动态组件component的Dom

    使用
  • MyBatis经典面试题及答案

    1 什么是MyBatis 答 MyBatis是一个可以自定义SQL 存储过程和高级映射的持久层框架 2 讲下MyBatis的缓存 答 MyBatis的缓存分为一级缓存和二级缓存 一级缓存放在session里面 默认就有 二级缓存放在它的命名
  • Composite——设计模式学习笔记

    Composite模式 一 意图 将对象组合成树形结构以表示 部分 整体 的层次结构 Composite使得用户对单个对象操作和组合对象的操作使用具有一致性 二 动机 绘图编辑器和图形捕捉系统图形应用程序中 总是存在简单的图形到简单的组件再
  • 15-Scala使用Option、Some、None,避免使用null

    1 避免null使用 大多数语言都有一个特殊的关键字或者对象来表示一个对象引用的是 无 在Java 它是null 在Java 里 null 是一个关键字 不是一个对象 所以对它调用任何方法都是非法的 但是这对语言设计者来说是一件令人疑惑的选
  • java.lang.reflect.UndeclaredThrowableException原因和解决方法

    在 Spring AOP中调用一个方法来进行数据验证 一旦数据验证失败 抛出一个自定义的异常 然而 却抛出了java lang reflect UndeclaredThrowableException 查了一下 因为我的自定义异常继承Exc
  • PHP-Tpthink5学习记录1(后台管理平台)

    Mysql数据库Mac安装 https www cnblogs com yanlin 10 p 9388911 html Tp5安装 方式一 http www thinkphp cn donate download id 874 html
  • Python使用Socket和多线程实现简单的TCP服务端和客户端通信

    本文主要是使用Socket的方式进行Python的网络编程 结合多线程完成服务端同时连接多个客户端的程序 学习了解Socket的主要工作流程 本文目录 一 关于Socket 1 Socket简介 2 Socket的主要类型 3 Socket
  • On-call机制——一种有效运维的方法

    对于On cal这一词 国内并没有特别明确的说法 因为这是个欧美流传过来的叫法 国内与之相接近的意思大致就是值班 再详细一些的说法便是指企业为了快速相应生产故障或者重大事件 在某段时间内指定某个人或者某组人随时待命 类似值班 在故障发生的一
  • 真随机游走的R语言代码

    Rwalk lt vector Rwalk 1 lt rnorm 1 for i in 2 60 Rwalk i lt Rwalk i 1 rnorm 1 ts Rwalk lt ts Rwalk win graph width 4 8 h
  • 在vs2008上面编译CGAL代码,error LNK2019: 无法解析的外部符号 _GetProcessMemoryInfo@12

    在vs2008上面编译CGAL代码 出现error LNK2019 无法解析的外部符号 GetProcessMemoryInfo 12这样的错误 在项目 配置属性 链接器 输入 附加依赖项在附加依赖项窗口中加上Psapi lib 可解决问题
  • 基础编程练习 7-14 求整数段和 (15 分)

    这个题需要掌握的是每5个数换一行 可以用 来进行实现 默认scanf的输入数据是右对齐的 关键在于 当输入正好的 5的倍数个数时 会打印两个换行 请看一下注释 include
  • js阻止默认事件(a标签跳转),阻止事件冒泡

    最近刚学习完js基础 今天发现对js的默认事件阻止以及阻止事件的冒泡有点忘记 于是写这篇文章算是做一个总结 也是加深一下印象 1 阻止默认事件 在html中有很多自带默认事件的元素 很典型的例子 a标签 如果给a标签绑定点击事件 触发后页面
  • C++中的lambda函数详解

    本文主要讲解C 中的lambda函数的使用方法与注意事项 谓词 为了理解lambda函数 首先要理解C 中的谓词是什么 语言中的谓词大部分情况下指一个动作 类似的 在C 中 所谓的谓词 就是指能作出一些动作的对象 换言之 也就是一些可调用的
  • 二、GRE(Generic Routing Encapsulation,通用路由封装协议)

    2 GRE 2 1 概念 GRE Generic Routing Encapsulation 通用路由封装协议 是一种传统的隧道协议技术 GRE对某些网络层协议的数据报进行封装 使这些被封装的数据报能够在IPv4网络中传输 2 2 GRE的
  • 【数模】主成分分析PCA

    主成分分析 Principal Component Analysis PCA 是一种降维算法 它能将多个指标转换为少数几个主成分 这些主成分是原始变量的线性组合 且彼此之间互不相关 其能反映出原始数据的大部分信息 使用场景 一般来说 当研究
  • EFT测试78L05损坏分析及解决方案

    I 问题现象 CQC样机送检时发现 经过EFT 4KV 测试后 发现RS485通讯中断 经检查是78L05 芯片损坏了 断电无法恢复 II 问题分析 本次测试的原理图及损坏器件位置如下 红色标记AU1为损坏的稳压管位置 故障复现 测试方法
  • git 配置

    git config global user name username username 是自己的账户名 git config global user email username email com username email com
  • 并发容器(一):普通容器&&同步容器&&并发容器

    前言 之前我们学习过了集合 并发编程 现在我们来学习并发容器 在并发编程中 经常听到Java集合类 同步容器 并发容器 那么他们之间有哪些分类 优劣呢 我们先把这个框架给分清楚了 这样后面学习的时候不会乱 集合容器 大家熟知的集合类Arra