首页 > 其他分享 >List类(线程安全和线程不安全)

List类(线程安全和线程不安全)

时间:2023-06-29 16:23:46浏览次数:32  
标签:容器 synchronized list List 安全 Vector 线程 操作

线程不安全类

  • 增删快
  • 里面有大量操作数组首尾的方法

2.Arraylist

  • 查询快
  • 大小可变的数组实现

线程安全类

1.Vector

从JDK1.0开始,Vector便存在JDK中,Vector是一个线程安全的列表,采用数组实现。

其线程安全的实现方式是对所有操作都加上了synchronized关键字,这种方式严重影响效率,因此,不再推荐使用Vector了

2.Collections.synchronizedList

  • 读写操作都比较均匀
  • 执行add()等方法的时候是加了synchronized关键字的,但是遍历listIterator(),iterator()却没有加.所以在使用的时候需要加上synchronized.

使用方法:

List<String> list = Collections.synchronizedList(new ArrayList<String>());
    list.add("a");
    synchronized (list) {
        Iterator it = list.iterator(); 
        while (it.hasNext()) {
            System.out.println(i.next());
        }
    }

3.CopyOnWriteArrayList

基本原理:

CopyOnWriteArrayList容器允许并发读,读操作是无锁的,性能较高。

至于写操作,比如向容器中添加一个元素,则首先将当前容器复制一份,然后在新副本上执行写操作,结束之后再将原容器的引用指向新容器

优缺点:

  • 读操作性能很高,因为无需任何同步措施,比较适用于读多写少的并发场景
  • 每次执行写操作都要将原容器拷贝一份,内存占用大
  • 读写分离,提高了读的效率,但是有时不能保证其数据的一致性

标签:容器,synchronized,list,List,安全,Vector,线程,操作
From: https://www.cnblogs.com/mask-xiexie/p/17514491.html

相关文章

  • WEB系统安全之开源软件风险使用评估
    本文分享自天翼云开发者社区《WEB系统安全之开源软件风险使用评估》,作者:Coding中国信息通信研究院(ChinaAcademyofInformationandCommunicationsTechnology,以下简称“中国信通院”)在2021年举办的“OSCAR开源产业大会”上,发布了《开源生态白皮书》,在其中虽然没有专门阐述......
  • WEB安全之:文件上传
    郑重声明:本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关。倡导维护网络安全人人有责,共同维护网络文明和谐。目录WEB安全之:文件上传1文件上传过程1.1浏览器打开上传页面1.2用户提交上传......
  • jmeter 解决线程组bzm-Concurrency Thread Group 安装的步骤
    1.首先 安装jmeter的插件,下载地址为放到lib/ext下,重启然后option下安装插件就Concurrency 就可以   ......
  • 线程池源码解析
    1.execute干了哪些事情1.1:首先判断任务是否为空1.2::判断工作线程数是否小于核心线程个数,小于则新增核心线程去处理该任务,然后返回。ctl是一个AtomicInteger变量,高3位表示线程池状态,低29位表示工作线程个数。1.3:如果核心线程个数已满,线程池状态是RUNNING状态,任务入队......
  • Oracle 基于标签的安全性
    Oracle基于标签的安全性(OLS)是Oracle数据库的一项功能,可根据安全标签对敏感数据提供细粒度的访问控制。此功能使组织能够根据数据的敏感性而不是传统的用户角色和权限方法来实施访问控制策略。本文将讨论Oracle基于标签的安全性的工作原理及其优势。Oracle基于标签的安全......
  • Iterator和LlistIterator迭代器的使用及底层原理:
    先来看下面的示例:publicclassDemo{publicstaticvoidmain(String[]args)throwsIOException{List<String>list=newLinkedList<>();list.add("唐僧");list.add("孙悟空");list.add("猪八戒")......
  • [渗透测试]—6.2 无线网络安全漏洞和攻击技术
    在本章节中,我们将学习一些常见的无线网络安全漏洞和攻击技术,如WPS漏洞、EvilTwin攻击等。我们将尽量讲解得详细、通俗易懂,并提供尽可能多的实例。6.5WPS漏洞Wi-Fi保护设置(WPS)是一种简化无线网络配置的技术,可以通过输入PIN码或按下物理按钮的方式快速连接无线网络。然而,WPS存在......
  • rtos中,线程设计原则
    设计原则:运行时间长的线程的优先级应较低;一个线程完成一个功能;可重入函数:可重入函数,可被中断,在这个函数执行的任何时刻可以中断它,转入执行另一段代码,返回时,不会出现什么错误;多任务系统下,中断可能在任务执行的任何时间发生,一个函数的执行期间被中断后,到重新恢复到断点进行执......
  • MFC中使用多线程
    一、在MFC中使用多线程,可以通过CWinThread类来实现。下面是一个简单的示例,演示了如何在MFC应用程序中创建和使用多线程:在你的MFC应用程序中包含头文件"afxmt.h",该头文件包含了多线程相关的类和函数。创建一个派生自CWinThread的自定义线程类。示例代码如下:classMyThrea......
  • 【Sword系列】第七届全国残疾人职业技能大赛样题-网络安全-word弱口令4
    前言Base64是一种编码算法,它能将二进制数据转换为可打印ASCII字符的字符串形式。它最常用的应用场景是在信息传输过程中,因为它可以确保数据在不同操作系统和网络环境中的互通性。Base64算法的实现过程非常简单,它将3个字节的二进制数据作为一组,分别以6位为单位进行编码。这样就能......