并发编程之的HashSet和HashMap的详细解析

HashSet不安全

HashSet也是线程不安全的,底层没有进行任何线程同步处理。

在hashset的源码中,底层是用hashmap实现的:

每次add的时候,把值放在了map对象中的key,而map对象的value则全部统一放一个常量:

在下面的demo中,hashset在多线程情况下和arrayList一样会抛出java.util.ConcurrentModificationException

/**
 * @author zkw
 * @Description HashSet不安全
 */
public class ThreadHashSet {
    public static void main(String[] args) {
        Set<String> list = new HashSet<>();
        for (int i = 0; i < 30; i++) {
            new Thread(()->{
                list.add(UUID.randomUUID().toString().substring(0,8));
                System.out.println(list);
            }, i+"").start();
        }
    }
}

解决方法 使用 CopyOnWriteArraySet

public class ThreadHashSet {
    public static void main(String[] args) {
        Set<String> list = new CopyOnWriteArraySet<>();
        for (int i = 0; i < 30; i++) {
            new Thread(()->{
                list.add(UUID.randomUUID().toString().substring(0,8));
                System.out.println(list);
            }, i+"").start();
        }
    }
}

HashMap不安全

使用HashMap空参构造,其初始容量是16,负载因子0.75

初始容量和负载因子都可以自定义,构造方法如下:

HashMap同上面两个类一样,在多线程情况下会出现并发修改异常java.util.ConcurrentModificationException

解决方法:使用ConcurrentHashMap

  public static void main(String[] args) {
        Map<String,String> list = new ConcurrentHashMap<>();
        for (int i = 0; i < 30; i++) {
            new Thread(()->{
                list.put(Thread.currentThread().getName(), UUID.randomUUID().toString().substring(0,8));
                System.out.println(list);
            }, i+"").start();
        }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/494969.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【前端学习——js篇】6.事件模型

具体见&#xff1a;https://github.com/febobo/web-interview 6.事件模型 ①事件与事件流 事件(Events) 事件是指页面中发生的交互行为&#xff0c;比如用户点击按钮、键盘输入、鼠标移动等。在js中&#xff0c;可以通过事件来触发相应的操作&#xff0c;例如执行函数、改变…

STM32H743驱动SSD1309(3)

接前一篇文章&#xff1a;STM32H743驱动SSD1309&#xff08;2&#xff09; 三、命令说明 1. 设置命令锁定&#xff08;FDh&#xff09; 此双字节命令用于锁定OLED驱动器IC&#xff0c;不接受除其自身之外的任何命令。在输入FDh 16h&#xff08;A[2]&#xff1d;1b&#xff09;…

C语言文件操作详解

文件是什么 在我们日常使用的电脑上我们在电脑磁盘上会看到许许多多的文件夹&#xff0c;那里面的东西其实就是文件&#xff0c;为什么我们要使用文件&#xff1f;那是因为我们的电脑肯定会要用来存储东西的&#xff0c;如果没有文件&#xff0c;那么我们的东西都全部存放在内…

应急响应小结

应急响应的整体思路 应急响应的整体思路&#xff0c;就是上层有指导性原则和思想&#xff0c;下层有技能、知识点与工具&#xff0c;共同推进和保障应急响应流程的全生命周期。 原则和指导性思路 3W1H原则&#xff1a;3W即Who、What、Why&#xff0c;1H即How&#xff0c;做应…

Vastbase编程利器:PL/pgSQL原理简介

PL/pgSQL是Vastbase提供的一种过程语言&#xff0c;在普通SQL语句的使用上增加了编程语言的特点&#xff0c;可以用于创建函数、存储过程、触发器过程以及创建匿名块等。 本文介绍Vastbase中PL/pgSQL的执行流程&#xff0c;包括PL/pgSQL的编译与运行。 1、编译 PL/pgSQL的编译…

Windows入侵排查

目录 0x00 前言 0x01 入侵排查思路 1.1 检查系统账号安全 1.2 检查异常端口、进程 1.3 检查启动项、计划任务、服务 0x00 前言 当企业发生黑客入侵、系统崩溃或其它影响业务正常运行的安全事件时&#xff0c;急需第一时间进行处理&#xff0c;使企业的网络信息系统在最短时…

CQ 社区版2.10.0 | 新增 SQL 审核、全新英文版上线…

三月中旬&#xff0c;我们预告了 CloudQuery 社区版即将上线的「SQL 审核」功能。现在&#xff0c;它来了&#xff01; 本次社区版 v2.10.0&#xff0c;除了 SQL 审核功能&#xff0c;我们还在手动授权、连接分组等模块做了新功能和优化。 新增功能 新增 SQL 审核功能 支持…

政安晨:【深度学习神经网络基础】(二)—— 神经元与层

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 神经元是深度学习神经网络中的基本单元&#xff0c;模拟了…

从零开始为香橙派orangepi zero 3移植主线linux——1.uboot

从零开始为香橙派orangepi zero 3移植主线linux——1.uboot 0.前言一、准备二、制作引导文件1.BL312.SCP firmware (Crust)3.uboot 三、烧录四、运行 0.前言 之前买了块香橙派zero3&#xff0c;CPU是全志H618&#xff0c;四核cortex-A53&#xff0c;烧录了官方的ubuntu系统后就…

nodejs中使用WebScoket的简单示例

前言 WebScoket可以用来实现即时通信,一般用于通信聊天工具或者是需要实时接受数据等功能 在浏览器环境中,WebScoket是一个构造函数,需要new创建连接的实例; 在nodejs环境中,则需要使用ws模块来完成服务的创建。 示例 下面是可以直接使用的代码,不需要修改 node创建服务端…

Avalonia笔记4-Rider如何添加xaml支持

在Linux Rider中&#xff0c;File Type中是有XAML文件的&#xff0c;但是新增xaml文件并不能正确的添加到项目中&#xff0c;而且就算是新增文件&#xff0c;直接命名为“XXX.xaml”&#xff0c;也是没有智能提示的。 在引用Style文件的时候&#xff0c;需要新建一个axaml的文…

STM32H743驱动SSD1309(2)

接前一篇文章&#xff1a;STM32H743驱动SSD1309&#xff08;1&#xff09; 二、芯片详解 1. 概览 上一回已提到&#xff0c;SSD1309是一个单片CMOS OLED/PLED驱动芯片可以驱动有机/聚合发光二极管点阵图形显示系统。由128个segments和64个commons组成。该芯片专为共阴极OLED…

机器学习——聚类算法-KMeans聚类

机器学习——聚类算法-KMeans聚类 在机器学习中&#xff0c;聚类是一种无监督学习方法&#xff0c;用于将数据集中的样本划分为若干个簇&#xff0c;使得同一簇内的样本相似度高&#xff0c;不同簇之间的样本相似度低。KMeans聚类是一种常用的聚类算法之一&#xff0c;本文将介…

【设计经验】0Ω电阻在电路中有什么作用

电路设计与调试过程中,我们很多时候要用到0Ω电阻(如下图),那么0Ω电阻到底在这过程中充当了什么样的角色呢? 0R电阻在电路中有什么作用? #创作灵感#:脑海存留的如下几点疑惑需要解开。 1、电路初次设计使用串接电阻为什么是0R电阻; 2、单板调试时为什么有时候会用到0R…

VMware Live Recovery 9.0 发布 - 多云实时恢复

VMware Live Recovery 9.0 - 多云实时恢复 VMware Live Cyber Recovery VMware Live Site Recovery 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-live-recovery/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.or…

Unity学习笔记 9.2D射线

下载源码 UnityPackage 1.Ray2D 让小球向右发射射线&#xff1a; Ray2D ray;void Start() {// Ray2D(起点&#xff0c;终点)ray new Ray2D(this.transform.position, Vector2.right);// Debug.DrawLine(起点&#xff0c;终点&#xff0c;颜色&#xff0c;显示时间)Debug.DrawL…

[实战]Springboot与GB28181摄像头对接。摄像头注册上线(一)

与支持国标摄像头对接 前言&#xff1a;不想看教程&#xff1f;1、准备阶段1.1、我们会学到什么&#xff1f;1.2、创建项目1.3、pom中用到的依赖1.4 打开摄像头的网址(了解配置方式) 2、代码编写2.1、增加项目配置2.2、在config目录下创建SipConfig2.3、在service目录下创建Sip…

如何在Windows 10中打开屏幕键盘?这里有详细步骤

本文解释了在Windows 10中打开或关闭屏幕键盘的不同方法,还解释了如何将屏幕键盘固定到开始菜单。 使用屏幕键盘的快捷键 如果你喜欢快捷方式,你会喜欢这个:按物理键盘上的Win+CTRL+O。这将立即显示屏幕键盘,而无需通过轻松使用。 ​提示:使用运行窗口也可以打开键盘。…

Tuxera for Mac2024软件产品密钥及下载安装教程

Tuxera for Mac在安全性和稳定性方面表现出色&#xff0c;为用户提供了可靠的数据保障和无忧的使用体验。 首先&#xff0c;从安全性角度来看&#xff0c;Tuxera for Mac采用了先进的技术来保护用户的数据。它支持快速全面的数据保护&#xff0c;通过智能缓存技术确保文件传输…

《手把手教你》系列技巧篇(五十七)-java+ selenium自动化测试-下载文件-下篇(详细教程)

1.简介 前边几篇文章讲解完如何上传文件&#xff0c;既然有上传&#xff0c;那么就可能会有下载文件。因此宏哥就接着讲解和分享一下&#xff1a;自动化测试下载文件。可能有的小伙伴或者童鞋们会觉得这不是很简单吗&#xff0c;还用你介绍和讲解啊&#xff0c;不说就是访问到…