首页 > 其他分享 >线程-线程安全基础篇

线程-线程安全基础篇

时间:2023-11-26 23:33:25浏览次数:28  
标签:HashMap 基础 链表 安全 线程 多线程 死循环

线程安全

一些线程安全的容器在复合操作下可能不是线程安全的

例:同步容器Vector
1.Vector这样的同步容器的所有公有方法全都是synchronized的,也就是说,我们可以在多线程场景中放心的使用【单独】这些方法,因为这些方法本身的确是线程安全的
2.由于,不同线程在同一时间操作同一个Vector,其中包括删除操作,那么就同样有可能发生线程安全问题。所以,在使用同步容器的时候,
如果涉及到多个线程同时执行删除操作,就要考虑下是否需要加锁。
3.最好使用其提供的复合的线程安全方法

线程不安全

例如:线程不安全的HashMap
在多线程环境下,使用HashMap进行put操作会引起死循环,
导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。例如,执行以下代码会引起死循环。

final HashMap<String, String> map = new HashMap<> (2);
Thread t = new Thread (() -> {
for (int i = 0; i < 10000; i++) {
new Thread (() -> map.put (UUID.randomUUID ().toString (), ""), "ftf" + i).start ();
}
}, "ftf");
t.start();
t.join();

1.HashMap在并发执行put操作时会引起死循环,是因为多线程会导致HashMap的Entry链表形成环形数据结构,
一旦形成环形数据结构,Entry的next节点永远不为空,就会产生死循环获取Entry。
2.JDK1.8之前,为了提高rehash的速度,冲突链表是使用头插法,因为头插法是操作速度最快的,
找到数组位置就直接找到插入位置了,头插法在多线程下回引起死循环
3.JDK1.8之后开始加入红黑树,当链表长度大于8时链表就会转换成红黑树,这样就大大提高了在冲突链表查找的速度,同时因为链表的长度不可能大于8,
链表在rehash的消耗就小很多,所以JDK1.8使用尾插法也避免了死循环问题

标签:HashMap,基础,链表,安全,线程,多线程,死循环
From: https://www.cnblogs.com/nxjblog/p/17858222.html

相关文章

  • 网络安全基础
    网络安全基础网络安全概述网络安全防护技术网络安全工程与管理新兴网络及安全技术教材问题问题:协议缺陷的后果解决方案:问AI基于AI的学习(SB百度)思考要有比较好的计算机基础,才可以更好进行学习。......
  • 2023-2024-1 20231309 《计算机基础与程序设计》第九周学习总结
    2023-2024-120231309《计算机基础与程序设计》第八周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第九周作业这个作业的目标作业正文2023-2024-120231309《计算机基础与程......
  • 2023-2024-1 20231415 《计算机基础与程序设计》第九周学习总结
    这个作业属于哪个课程 这个作业要求在哪里 作业目标 作业正文 教材内容总结《计算机科学概论》第十章操作系统操作系统的角色与构成进程管理先到先服务FCFS最短作业优先轮询法内存管理单块内存管理分区内存管理页式内存管理CPU调用先到先服务FCFS最短作......
  • # 2023-2024-1 20231322 《计算机基础与程序设计》第九周学习总结
    |2022-2023-1-计算机基础与程序设计)||--|--||2022-2023-1计算机基础与程序设计第九周作业||这个作业的目标|总结本周学习成果及疑问||作业正文|(https://www.cnblogs.com/cjl03/p/17858148.html)|教材学习内容总结操作系统责任,内存与进程管理,分时系统,CPU调度,文件、文件系统,......
  • 2023-2024 20231404高伟光《计算机基础与程序设计》第九周学习总结
    作业信息作业内容我的班级我的班级作业要求第八周要求作业目标操作系统责任,内存与进程管理,分时系统,CPU调度,文件、文件系统,文件保护,磁盘调度作业正文此博客教材内容总结c语言程序设计第八章介绍了数组的一系列用法定义,介绍了经典的排序和查找算法,比......
  • 2023-2024-1 20232421邓锴 《网络空间安全导论》 第3周学习总结
    教材学习总结了解网络安全遭受的威胁以及各种攻击手段的基本逻辑了解当前网络安全的现状以及发展原因了解当前为维护网络安全所产生的网络安全防护技术从法律、管理层面认识网络安全从计算机系统(硬件系统、操作系统、数据库系统、应用系统)层面认识网络安全教材学习中的问......
  • Java守护线程
    Java中的线程分为两类,分别为daemon线程(守护线程)和user线程(用户线程)。在JVM启动时会调用main函数,main函数所在的钱程就是一个用户线程。其实在JVM内部同时还启动了很多守护线程,比如垃圾回收线程。那么守护线程和用户线程有什么区别呢?区别之一是当最后一个非守护线程束时,JV......
  • py02-基础定义和常用方法小结
    二、基础定义和常用方法小结1、标识符:用来做内容的标识,用于给变量、类、方法等命名2、变量命名规范:见名知意、下划线命名法、英文字母全小写3、算术(数学)运算符:+、-、*、/、//(取整)、%(取余)、**(指数)4、比较运算符:==、!=、>、<、>=、<=,满足为True,不满足为False5、成员运......
  • SkiaSharp库在NetCore下跨平台图片操作基础使用方法
    SkiaSharp库在NetCore下跨平台图片操作基础使用方法:在跨平台开发中,处理图片是一项常见的需求。而SkiaSharp库是一个强大的工具,它提供了在NetCore平台下进行跨平台图片操作的能力。本文将介绍SkiaSharp库在NetCore下的基础使用方法,以及逐步深入的高级功能。什么是SkiaSharp?SkiaS......
  • 2023-2024-1 20231323《计算机基础与程序设计》第九周学习总结
    2023-2024-120231323《计算机基础与程序设计》第9周学习总结作业信息所属课程2023-2024-1-计算机基础与程序设计作业要求在哪里2023-2024-1计算机基础与程序设计第九周作业作业目标学习《计算机科学概论》第10,11章,《C语言程序设计》第8章并完成云班课测试作业......