java 线程同步的list_java集合框架线程同步代码详解

2023-10-31

List接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括null在内的所有元素。除了实现List接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于Vector类,除了此类是不同步的。)size、isEmpty、get、set、iterator和listIterator操作都以固定时间运行。add操作以分摊的固定时间运行,也就是说,添加n个元素需要O(n)时间。其他所有操作都以线性时间运行(大体上讲)。与用于LinkedList实现的常数因子相比,此实现的常数因子较低。每个ArrayList实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增长。并未指定增长策略的细节,因为这不只是添加元素会带来分摊固定时间开销那样简单。在添加大量元素前,应用程序可以使用ensureCapacity操作来增加ArrayList实例的容量。这可以减少递增式再分配的数量。

注意,此实现不是同步的。

如果多个线程同时访问一个ArrayList实例,而其中至少一个线程从结构上修改了列表,那么它必须保持外部同步。(结构上的修改是指任何添加或删除一个或多个元素的操作,或者显式调整底层数组的大小;仅仅设置元素的值不是结构上的修改。)这一般通过对自然封装该列表的对象进行同步操作来完成。如果不存在这样的对象,则应该使用Collections.synchronizedList方法将该列表“包装”起来。这最好在创建时完成,以防止意外对列表进行不同步的访问:

Listlist=Collections.synchronizedList(newArrayList(...));

此类的iterator和listIterator方法返回的迭代器是快速失败的:在创建迭代器之后,除非通过迭代器自身的remove或add方法从结构上对列表进行修改,否则在任何时间以任何方式对列表进行修改,迭代器都会抛出ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不是冒着在将来某个不确定时间发生任意不确定行为的风险。

注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误的做法:迭代器的快速失败

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

java 线程同步的list_java集合框架线程同步代码详解 的相关文章

  • Java-System、Math、BigInteger、BigDecimal常用类的使用

    Java System Math BigInteger BigDecimal常用类的使用 1 System类 System类代表系统 系统级的很多属性和控制方法都放置在该类的内部 该类位于java lang包 由于该类的构造器是privat
  • 解决Linux7 ping出现 未知的名称或服务 错误

    问题描述 Linux7在利用命令nmtui进入图形化界面配置Linux的网络后为测试是否成功联网 ping配置的IP成功但ping如www baidu com常见网站时出现 gt ping www baidu com 未知的名称或服务 解决
  • 网络编程知识预备(5) ——libcurl库安装及其编程访问百度首页(断点续传)

    本文为学习笔记 整合课程内容以及下列文章 其中 libcurl函数库常用字段解读部分 参考博文 原文地址 作者 冬冬他哥哥 目录 Libcurl库简介 Libcurl等三方库的通用编译方法 三方库使用前通读方法 库的配置 编译 安装 调用l
  • protobuf生成prototxt文件

    使用protobuf可以分为以下几步 1 proto文件的定义 在这个文件中定义了最终生成的prototxt格式 举个例子如下所示 syntax proto2 package label proto message DetectLabel
  • scrapy缺点

    Scrapy 是一个功能强大的网络爬虫框架 但也有一些缺点 Scrapy 只能爬取静态网页 无法爬取动态网页 Scrapy 只能爬取一个网站的数据 无法爬取多个网站的数据 Scrapy 需要编写代码 对于那些不会编写代码的人来说可能会有些困
  • LiteOS内存管理

    1 内存管理简介 内存管理模块管理系统的内存资源 它是操作系统的核心模块之一 主要包括内存的初始化 分配以及释放 在系统运行过程中 内存管理模块通过对内存的申请 释放操作 来管理用户和OS对内存的使用 使内存的利用率和使用效率达到最优 同时
  • obs无法连接服务器?PotPlayer获取不到视频

    搭建基于nginx的rtmp直播服务器 https hywlovexyc info blog archives 572 rtmp server listen 1935 监听的端口 chunk size 4000 application yu
  • 删除中间节点

    题目 若链表中的某个节点 既不是链表头节点 也不是链表尾节点 则称其为该链表的 中间节点 假定已知链表的某一个中间节点 请实现一种算法 将该节点从链表中删除 例如 传入节点 c 位于单向链表 a gt b gt c gt d gt e gt
  • sqlserver查看数据表结构

    可以通过两种方式 1 sp help 表名 2 sp columns 表名
  • 我的世界服务器config文档,Essentials/配置文件/config.yml

    ops name color none nickname prefix max nick length 15 change displayname true change playerlist true add prefix suffix
  • Unity--虚拟轴

    1 查看虚拟轴 Edit gt project settings gt Input 2 获取虚拟轴 input GetAxis 用法 GetAxis Mouse X GetAxis Mouse Y GetAxis Mouse ScrollW
  • centos7Linux中的lvm、pv、vg、lv,以及Linux扩容,创建新分区

    概念 本着言简意赅的目的 以下概念会在扩容时用到 需熟知 不然会不理解具体操作在干什么 lvm 逻辑卷管理器 Logical Volume Manager 它使系统管理员可以更方便的为应用与用户分配存储空间 在LVM管理下的存储卷可以按需要
  • QT信号槽原理(一)connect函数

    目录 2个类型和1个签名 Qt ConnectionType QMetaMethod MethodType 方法签名 connect函数源码解析 函数原型 第一步 参数检查 第二步 获取信号和槽的index 第三步 检查信号和槽的参数是否匹
  • Opencv之图像固定阈值二值化处理threshold

    目录 一 图像二值化 二 threshold 三 代码 一 图像二值化 定义 图像的二值化 就是将图像上的像素点的灰度值设置为0或255 也就是将整个图像呈现出明显的只有黑和白的视觉效果 灰度值0 黑 灰度值255 白 一幅图像包括目标物体
  • Cygwin编译JNI的环境配置

    一 什么是NDK NDK提供了一系列的工具 帮助开发者快速开发C 或C 的动态库 并能自动将so和java应用一起打包成apk 这些工具对开发者的帮助是巨大的 NDK 集成了交叉编译器 并提供了相应的mk文件隔离CPU 平台 ABI 等差异
  • MacBook怎么安装使用Windows软件和虚拟机?

    作为一名MacBook用户 你可能会发现有些软件和应用程序只适用于Windows操作系统 但别担心 今天我们将介绍两种方法 让你的MacBook轻松安装Windows软件和运行Windows虚拟机 为你的工作 学习和娱乐任务带来更多可能性
  • Vue 3 使用 vue-echarts 的柱状图 barItem 和 x, y 轴点击事件实现

    需求背景 最近使用 Vue 3 开发柱状图功能 图表已经绘制完成了 但是突然有需求加进来要可以点击柱状图的柱子 barItem 和 x y 轴的坐标 然后根据点击的位置 处理不同区域的点击事件 作为 CV 程序员 第一时间搜索网上的解决方案
  • 抖音养号步骤有哪些?最重要的3步你做到了吗?

    国仁网络资讯 为大家整理一份超详细的 短视频运营手册 回复私信限时免费领取 有人问我 新手养号怎么养 老账号养号要怎么养 其实 严格来说 养号不分新老 不管你是刚注册的抖音号 还是已经用过很久的抖音号 养号都是运营账号必做的事项之一 那么
  • C++文件的读取详解,以及使用eof出现末行数据被读取两次情况

    目录 0 前言 对文件流的读写 文件打开方式 1 写文本文件 2 读文本文档 2 1使用efo函数判断出现数据被读取两次 3 二进制方式写文件 4 二进制读文件 5 按指定格式读写数据stringstream 0 前言 对文件流的读写 if

随机推荐

  • text/html & text/plain的区别

    需要了解的概念 Content Type 用于定义用户的浏览器或相关设备如何显示将要加载的数据 或者如何处理将要加载的数据 MIME MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型 当该扩展名文件被访问的时候 浏览器会自
  • Red Hat Enterprise Linux 7.9 下载

    1 Red Hat Linux 所有版本 5 6 7 8 9 下载 https pan baidu com s 1eSYuljc2Bt9OXZmWdZQ96A 提取码 cqfu 推荐 https pan baidu com s 1RISly
  • c#:委托与回调函数示例

    c 委托与回调函数示例 上一篇文章已经给大家详细讲解过委托的意思 如何声明定义 如何通过委托调用函数 以及委托中的多播等 今天是刚刚学到委托新的用法 可以将方法当作参数来传递 并且不需用示例委托 所以今天来给大家再次拿出来详细讲解一下 一
  • Spring Boot日志配置logback

    目录 一 logback介绍 1 logback定义 2 logback启动加载文件 3 pom依赖 3 日志级别 二 配置文件详解 1 configuration 2 property 3 springProperty 4 logger
  • Flutter 自定义marquee垂直滚动

    自定义垂直marquee插件 用来向上垂直滚动列表 一般滚动公告 自定义类 import dart async import package flutter material dart class Marquee extends State
  • mongodb的sharding(分片)横向扩容的方法

    sharding是mongodb进行横向扩容的方法 sharding把一个集合的不同部分存储到不同的机器上 当一个数据库集合变得很大时 你只需要加入新的机器即可 sharding自动把集合的数据分布到新的服务器上 sharding自动实现数
  • uni-app小程序中v-show与display:flex一起使用时v-show不生效!

    问题 同时使用v show与display flex的时候 发现v show不能隐藏元素 原因 经排查原因后发现是因为display flex样式的优先级高于了v show中的display none 解决办法 display flex不要
  • xpah的使用

    目录 基本介绍 基本使用 案例 基本介绍 为什么要学习xpath scrapy框架支持xpath提取 selenium 经常使用xpath提取 使用简洁 语法稍稍复杂 xpath是什么 全称 xml path language 从xml中提
  • Jackson快速入门

    Java生态圈中有很多处理JSON和XML格式化的类库 Jackson是其中比较著名的一个 虽然JDK自带了XML处理类库 但是相对来说比较低级 使用本文介绍的Jackson等高级类库处理起来会方便很多 引入类库 由于Jackson相关类库
  • How to use jupyterlab in Ubuntu 22.04

    How to use jupyterlab in Ubuntu 22 04 Install Start Stop Install lwk qwfys pip install jupyterlab upgrade i http mirrors
  • matplotlib中颜色映射的使用

    matplotlib3 3中使用颜色映射 问题描述 在Python编程从入门到实践一书中15 2 8节 按照书中代码 在python3 8与matplotlib3 3中 camp plt cm Blues报错 解决 搜索发现应将此处语法改为
  • WDS桥接副路由器有线上网方法

    副路由器DHCP一定要关闭 或者IP池设置的范围不能包括有线设备IP
  • 替换字符串中出现的某段字符串的C语言和C++实现方式

    C语言实现方式 使用了循坏来重复替换操作 直到无法再找到需要替换的子串为止 具体实现如下 include
  • ajax地址url和action,jsp,ajax_JSP中 post url地址重写or action如何实现,jsp,ajax - phpStudy...

    JSP中 post url地址重写or action如何实现 求解在JSP中 post url地址 ctx web webuser getRights 这个是获取导航JSON ctx 是应用地址知道 后面 web webuser getRi
  • Docker实践(一)应用场景和安装

    随着互联网的发展 容器技术越来越得到大规模应用厂家的重视 Docker作为paas平台的容器 最近几年引起众多技术人士的关注 并且也越来越流行 一 Docker是什么 Docker 是一个开源的应用容器引擎 让开发者可以打包他们的应用以及依
  • (c/c++)——类型转换

    文章目录 一 C风格的类型转换 二 C 的强制类型转换 1 static cast 最常用 2 reinterpret cast 只用于指针或引用转换 3 const cast 去除指针或引用的const限定 4 dynamic cast
  • QT 项目中 配置文件 pro详解

    QT 的配置文件 pro 解析 1 注释 单行注释 2 QT core gui QT gui 新增 或者减去 QT使用的模块 各个模块间使用空格分开 默认会包含 core 与 gui两个模块 3 TEMPLATE VALUE模板 VALUE
  • mysql group by 后求和_MySQL分组求和GROUP BY

    源代码实例 工资统计表 SELECT wages header bill date wages name SUM wages money AS moneys FROM wages header LEFT JOIN wages ON wage
  • 输入字符串,统计各个字符出现的个数(C语言实现)

    include
  • java 线程同步的list_java集合框架线程同步代码详解

    List接口的大小可变数组的实现 实现了所有可选列表操作 并允许包括null在内的所有元素 除了实现List接口外 此类还提供一些方法来操作内部用来存储列表的数组的大小 此类大致上等同于Vector类 除了此类是不同步的 size isEm