news 2026/9/4 9:16:14

Java线程安全集合大揭秘:vector、hashtable为何被嫌弃?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java线程安全集合大揭秘:vector、hashtable为何被嫌弃?

线程安全类

有的类于集合框架里, 为线程安全的, 此类皆于jdk1.1时出现。在jdk1.2过后, 便出现数目众多的非线程安全的类。以下是那些线程安全且同步的类:

只是比别的多了个同步化机制, 此机制具备线程安全特性, 由于其效率比较低, 所以现在已经不太被建议去使用。在web应用里, 尤其是前台页面, 通常效率也就是页面响应速度, 是会被优先去考虑的。

:堆栈类,先进后出

:就比多了个线程安全

:枚举,相当于迭代器

除了这些之外,其他的都是非线程安全的类和接口。

线程安全的类里头, 其方法是同步的, 每一次仅仅能够有一个去进行访问, 它属于重量级对象, 效率是比较低的。

其他:

1. 跟的区别

有的是具备线程安全性的, 也就是其相关方法全都构建了同步机制;有的则并非线程安全, 即没有提供相关同步机制 ;存在不允许插入空值的情况, 却也有允许插入空值的情况!

2. 多线程并发修改一 个 集合 怎么办

用老的/类

线程不安全, 而非线程安全。在对安全与不安全欠缺深入理解之时, 容易造成这般错觉, 假设众多操作皆为线程安全, 然而, JAVA给出的线程安全保证,指的是其方法在执行时具有排他性, 并非在对该对象本身进行多次调用的情形下, 依旧安全。看一下下面所呈现的例子, 其中存在着一个用于进行扩展的数据成员, 它的每一回都是具备线程安全属性的, 可是众多此回的组合却并非是线程安全的概念范畴, 该输出层面所要展现的结果并非是特别易于掌控的那种状态, 然而要是在对于相关日志以及方法增添关键字的情形下, 那样的结果就会在条理的程度上变得很是优异可观, 假如更改为甚至是到达一半的特定阶段, 它将会给予其它运行于这个关键层面之基础顶部所进行正常操作的线程以妥善的让位处理:

class {

= new ();

void log( ){

.(.());

.("; ");

.(.().());

for(int i=0;i .(i);

这点是线程安全的, 在进行修改操作期间, 别的线程是没有办法去访问的。

.("\n");

.("\n\n");

void (){

.out.();

class {

( , ){

this. = ;

this. = ;

void run(){

while(true){

.log();

.();

void main( args) {

ss = new ();

new (ss, "you").start();

new (ss, "me").start();

new (ss, "she").start();

和的办法是完全相同的, 只是存在一个多线程以及一个单线程的情况。线程调用相同的方法, 这与它是否为线程安全并无关联, 除非你的结果是一系列字符串变得混乱了, 那样才能够表明它是线程不安全的。线程安全意味着在任何时刻仅有一个线程访问临界资源。线程安全并非意味着它的一系列操作是同步的, 仅仅是在它执行某个方法时不许其他线程进行改变。对于一个类而言, 线程安全与否要看多种情况,多个线程会同时处于运行状态, 这些线程有可能共同去执行某个方法, 然而每次运行所产生的结果和单线程执行时的结果是相同的, 这样的话就能够称其为线程安全的 , 由于log方法并未进行上锁操作, 每个线程在锁被释放之后, 都存在获得cpu执行片段的可能性。

但不要对多线程安全存在误解:

(){

= new ();

.('');

.();

这段代码具备完全的线程安全性, 于方法内部所定义的变量, 在每一个线程进入之际, 均会创建此局部变量, 并不牵涉线程安全问题。一般而言, 涉及系统安全的变量大多属于成员变量。其自身的内部实现呈现现场安全特性。线程安全乃是类本身所提供的安全功能。也就是说倘若你进行插入一个字符串的操作, 那么该字符串的插入便是安全的, 然而要是插入两个字符串, 且这两个字符串的顺序由你给定, 在这两者若有其他插入操作出现错误的情况下, 便与类无关了,这是你自身代码存在的问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 14:37:07

YOLOv5安全帽检测项目实战:从数据准备到边缘部署全流程解析

简介:本资源是一套高完成度的YOLOv5安全帽检测实战项目,面向计算机、人工智能及相关专业本科生毕业设计、课程设计与期末大作业需求,解决施工现场人员安全防护识别这一典型工业视觉应用问题。压缩包共164个文件,含34个配置类YAML文…

作者头像 李华
网站建设 2026/9/4 4:39:58

筷子计数数据集:工业小目标检测即用型标注资产

简介:本资源是一个面向计算机视觉初学者与算法工程师的轻量级目标检测标注数据集,专为筷子计数任务设计,适用于YOLOv5/v8、Faster R-CNN等主流模型的训练与验证。数据集包含210张真实场景拍摄的筷子图像(jpg)&#xff…

作者头像 李华
网站建设 2026/9/4 23:09:39

STM32驱动OLED仿真:基于Proteus的零成本嵌入式显示开发指南

简介:本资源是一套面向嵌入式初学者与STM32进阶开发者的OLED显示实践方案,聚焦于基于STM32F1系列微控制器的OLED驱动开发与Proteus虚拟仿真验证。资源完整覆盖硬件接口(I2C/SPI)、SSD1306驱动库移植、底层寄存器配置及图形显示逻辑…

作者头像 李华
网站建设 2026/9/5 0:58:42

从零构建高精度PCB缺陷检测数据集:YOLOv5实战与99.8%准确率达成

简介:本资源是一套面向工业视觉检测与深度学习初学者的PCB电路板缺陷识别实战数据集,专为YOLOv5目标检测模型训练与部署优化设计,解决电子制造中焊点缺失、短路、划痕等典型缺陷的自动化识别难题。压缩包共2000个文件,含1297张高质…

作者头像 李华
网站建设 2026/9/4 8:34:06

Swift 结构体:从基础到进阶的全面指南

1. 引言在 Swift 中,结构体(Struct)是构建代码模块的核心类型之一。与类(Class)不同,结构体是值类型,这一特性让它在 Swift 开发中扮演着极其重要的角色。无论是定义一个坐标点、一个网络请求的…

作者头像 李华