为啥Vector类不是绝对线程安全

Vector是线程安全的 上次被问到,vector是线程安全的,一直不知道是为什么,看了csdn上一篇提问(http://bbs.youkuaiyun.com/topics/320059353),简要总结一下: Vector test = Vector(); ....... ....... for (i = 0; i  {     /////////////////在此处当前线程时间片到期 阅读详情

深入理解Jvm里面讲到Vector类不是绝对线程安全,代码:

private static Vector<Integer> vector = new Vector<>();

public static void main(String args[]) throws Excption{
    while(true){
        for(int i=0; i<10; i++){
            vector.add(i);
        }
        Thread removeT = new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i=0; i<vector.size(); i++){
                    vector.remove(i);
                }
            }
        });
        Thread getT = new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i=0; i<vector.size(); i++){
                    System.out.println(vector.get(i));
                }
            }
        });
        getT.start();
        removeT.start();
        while(Thread.activeCount()>20);
    }
}

这段代码有下标越界的异常可能:代码中循环的时候有个下标i,同步会阻塞在remove和get,但是i已经定了,如果你恰好去查询的下标是最后一个,但是在你获取锁之前另一个线程给他删了就会异常。

如果理解有误,恳求指正,谢谢

Vector和List 有关线程安全和线程同步的理解 最近在学习的时候,一直很疑惑Vector和List的两个容器的区别。 在网上查了好多资料, 阅读详情

相关推荐

用App Inventor做个蓝牙温湿度计,手机自动连Arduino,5分钟搞定硬件数据上屏

本文详细介绍了如何使用App Inventor和Arduino快速搭建一个蓝牙温湿度监测系统,实现手机自动连接并显示实时数据。通过图形化编程和硬件组装指南,零代码基础的用户也能在5分钟内完成硬件数据上屏,适用于智能家居、教学演示等多种场景。

weixin_30813225的博客 171

Vector并非绝对安全

在https://blog.youkuaiyun.com/qq_16669583/article/details/90611510中对Vector的讲解中说到其相对于ArrayList来说最大的区别是线程安全的,因为在操作方法上都加上了同步锁,但今天在《深入理解Java虚拟机》书中讲到,其实Vector并不是绝对线程安全的,比如如下代码: package com.bjtu.thread; import ...

LMR的博客 7540

UE 动态获取 资源缩略图 下载到本地或返回图片信息

UE 动态加载资源缩略图 返回图片信息或保存到本地

qq_46080252的博客 1937

Vector为什么是线程安全的呢?Vector为什么是线程不安全的呢?

其实这个标题就有点猎奇了。其实对于大多数人来说,线程安全线程不安全,听起来更像是一种编码理论,实际并不会用到,而对于现在的Java程序员来说更是如此,层出不穷的框架早就帮我们明里暗里处理好了线程安全的问题,但是,我还是觉得有必要了解这些东西。 其实对于Vector来说,大多数人可能比较陌生,知道的最多的就是面试的时候要说出它和ArrayList的区别,即一个是线程安全的一个不是,仅此而已,今天翻到...

weixin_43217817的博客 1万+

Qt自带绘图与GDI+绘图方式比较_gdi+实时绘制qt(2)

2、GDI+是Windows操作系统中的图形设备接口,它提供了一套用于绘制图形的API,包括了图形渲染、图形变换、图形剪切、图形填充等功能,使开发者可以快速地开发出各种类型的图形应用程序。1、Qt是一个跨平台的C++应用程序框架,它提供了一套用于GUI编程的类库,包括了绘图、网络、XML、数据库、多线程等模块,使开发者可以快速地开发出高质量的跨平台应用程序。Qt提供了一套用于绘图的类库,包括了QPainter、QPen、QBrush等类,使开发者可以快速地进行图形绘制。

qq_17136213的博客 917

西门子828D/840DSL数控机床产量数据采集实战:一个C#程序员的踩坑与填坑记录

本文详细记录了C#程序员在西门子828D/840DSL数控机床产量数据采集实战中的经验与教训。从硬件连接到软件配置,再到数据读取与异常处理,文章分享了工业现场编程的特殊挑战和解决方案,特别是针对数控系统的TCP/IP通信、PLC变量地址映射及数据解析等关键技术点。

weixin_42741930的博客 595

Vector 是线程安全的?

或许,大家经常也碰到类似的问题:Vector 与 ArrayList 的区别? 好多人一拍脑门就出:Vector 是线程安全的 (在任何情况下都是)。。。 原因可能是因为 Vector 的所有方法加上了 synchronized 关键字,从而保证访问 vector 的任何方法都必须获得对象的intrinsic lock(或叫monitor lock),也即,在vector内部,其所有方法不会...

qq_25330791的博客 2692

向量化和向量数据库的开发步骤,以及本地docker下载Redis-stack-server,以及如何将文本转成向量,以及文本向量化成功后将数据存入到Redis-stack-server这个向量数据库

内存可以作为向量数据库,但是一重启一断电数据就没了这了选择RedisStack作为向量数据,用来向量的存储,未来会改名成Redis8,也就是在原本的Reids的功能上增加了新的特性,本质上还是Redis向量数据库还可以用ElaticSearch、MongoDB等。

qq_61723836的博客 1082

Vector的线程安全问题

首先提一个问题,Vector是线程安全的吗? 很多人都会回答:vector是线程安全的。 确实,通过查看JDK源码中,Vector确实是线程安全的,至少Vector的作者是这么说的。 通过观察源码,发现 Vector 类中的大部分方法都是由 synchronized 关键字来修饰的,这也就保证了所有的对外接口都会以 Vector 对象为锁。访问 Vector 的任何方法都必须获得对象的 intrinsic lock (或叫 monitor lock ),所以在Vector内部,所有的方法都不会被多线

小小本科生 8032

Linux 系统管理员必备:Chrome 企业版离线部署全攻略(含 RPM/DEB 双版本)

本文详细介绍了Linux系统管理员如何离线部署Chrome企业版,涵盖RPM和DEB双版本。从获取官方离线安装包到静默安装、权限配置及企业级策略管理,提供全流程解决方案,特别适合Ubuntu等DEB系系统管理员参考。

f9g0h的博客 483

【ARM AMBA5 CHI 2 -- CHI 链路层详细介绍 】

目前有六个版本的 CHI 协议,CHI-A 是 CHI 协议的第一个版本。它提供了一个传输层,具有减少拥塞的功能。新通道、CHI 术语和组件命名的定义;请求、监听过滤器和缓存状态转换的示例;事务排序、独占访问和分布式虚拟内存(DVM)操作的规则;CHI-B 问题扩展了 CHI-A,但不能直接向后兼容 CHI-A。更大的物理地址宽度;原子事务;DVM 的 VMID 扩展;通道字段、事务结构和可靠性、可用性和可维护性(RAS)特性的描述;

CodingCos的博客 2535

原创 | 面试官问我同步容器(如Vector)的所有操作一定是线程安全的吗?我懵了!...

△Hollis, 一个对Coding有着独特追求的人△这是Hollis的第226篇原创分享作者 l Hollis来源 l Hollis(ID:hollischuang)...

HollisChuang's Blog 2498

Open3D 模拟退火算法优化的ICP点云配准

传统ICP算法易陷入局部最优且对初始位姿敏感,而SA算法通过概率性接受劣解,能够在高温阶段广泛探索解空间,低温阶段精细收敛。

点云侠的博客 244

Vector并非是绝对的线程安全类

众所周知,Vector是一个线程安全的类,其在add()等操作上添加了synchronized关键字实现同步,但是并非是绝对的线程安全类. 当进行迭代遍历时,如果在另一个线程执行add(),remove()操作,仍然会有机率抛出异常ConcurrentModificationException. Java版本:9.0.1 package com.util; import java.util...

皮蛋瘦肉的博客 2897

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java集合中那些类是线程安全的

线程安全类 在集合框架中,有些类是线程安全的,这些都是jdk1.1中的出现的。在jdk1.2之后,就出现许许多多非线程安全的类。 下面是这些线程安全的同步的类: vector:就比arraylist多了个同步化机制(线程安全),因为效率较低,现在已经不太建议使用。在web应用中,特别是前台页面,往往效率(页面响应速度)是优先考虑的。 statck:堆栈类,先进后出 hashtable:就比

Mexican的博客 10万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

多线程:Vector是线程安全的吗

线程安全,在java的多并发编程中是重要概念,意思是,多个线程同时操作一个对象,在各种不同情况下,都不会造成不同的后果。 一个经典问题,Vector到底是不是线程安全的?   很多人都会回答,是,vector是线程安全的。 诚然,不止是很多IT教材上是这么写的,就连JDK的作者写的注释也是这么说的。如下图(图为 JDK中Vector的源代码):注释中,红框标记的部分写着:如果你不需要线程安...

五山口老法师 3787

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

同步容器(如Vector)并不是所有操作都线程安全!~

三天之内收到120+回复,其中表示不清楚的大概有10人左右,认为可以保证线程安全的有大概70人左右,认为不能保证线程安全的有50人左右,这其中能给出明确解释的有5人。分别是:@赵鹏:size方法和get方法,如果集合的长度变化了,可能抛出异常,@aold619:去网上查了资料:“有条件的线程安全 我们在 7 月份的文件“ 并发集合类”中讨论了有条件的线程安全。有条件的线程安全类对于单独的操作可以是线程安全的,但是某些操作序列可能需要外部同步。

xnxqwzy的博客 1160

java vector 类

Collection下的子类图Vector类 是在 java 中可以实现自动增长的对象数组Java中Vector类是允许不同类型元素共存的变长数组,Java.util.Vector提供了向量(Vector)类以实现类似动态数组的功能。在Java中是没有zhizheng 概念的,但如果能正确灵活地使用指针又确实可以大大提高程序的质量,比如在C、C++中所谓“动态数组”一般都由指针来实现。为了弥补这点缺陷,Java提供了丰富的类库来方便编程者使用,Vector类便是其中之一。

m0_61682705的博客 1760

什么是线程安全?Vector是一个线程安全类吗?_vector 是一 个线程安全类吗

线程安全是多线程编程中的一种概念,它涉及到如何在多个线程同时访问资源时确保资源的正确使用和保护。线程安全意味着一个类或方法在多线程环境中可以安全地被多个线程同时访问,而不会导致数据的不一致或者其他不可预知的结果。在Java中,Vector类本身并不是线程安全的。这意味着如果有多个线程同时访问和修改Vector,可能会导致数据的不一致性,比如元素添加、删除和查找操作的错误结果。为了解决这个问题,Java提供了一些线程安全的集合类,如Vector的线程安全版本Vector的线程安全版本,或者使用。

2401_83621499的博客 781

Java中Vector的操作一定是线程安全的嘛?

Java中Vector的操作一定是线程安全的嘛? Java中Vector类是JDK1.2加入的遗留集合,其内部的方法主要是通过synchronized关键字进行封装,保证这个类是一个线程安全的类,那么是不是vector的操作一定是线程安全的呢?本文将带你分析不一样的vector。 01 vector简介 首先,我们使用简单的描述vector的重要方法。这里是...

Oeljeklaus的博客 6108

Vector线程安全

Vector是线程安全的,因为Vector好多方法是sychornized关键字修饰的,比如addElement方法: Public syschronized void addElement(E obj){ modCount++; ensureCapatityHelper(elementCount+1); elementData[elementCount++]=obj;...

xuxin132133的博客 2330

Vector真的是线程安全的吗

转载请标明出处^_^ 原文首发于:www.zhangruibin.com 本文出自于:RebornChang的博客 Vector真的是线程安全的吗 Vector类 继承了 AbstractList<E> 实现了 List<E>, RandomAccess, Cloneable, java.io.Serializable接口。 AbstractList 类 继承了 A...

Reborn_Chang的博客 2233

Vector并非绝对线程安全

1.前言 Java集合框架中的Vector集合通过对可能引发线程安全问题的方法(例如:add()、remove()、size()等等)加synchronized关键字实现了线程安全,但这种实现仅能在一定程度上减少多线程并发操作下出现问题的可能性,例如下面的情况就可能会出现线程不安全问题。 Vector<String> vector = new Vector<>(); ...... ...... for(int i = 0; i < vector.size(); i++

小诸葛的博客 704

什么是线程安全?

线程安全 “线程安全”的定义: 当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那就称这个对象时线程安全的。 该定义要求线程安全的代码都必须具备一个共同特征: 代码本身封装了所有必要的正确性保障手段(如互斥同步等),令调用者无须关心多线程下的调用问题,更无须自己实现任何措施来保证多线程环境下的正确调用。 java语言中的线程安全 线程安全,将以多个线程之间存在共享数据访问

贾欣晓的博客 2万+

【Vector】【ConCurrentHashMap】线程安全

这两个集合,是 Java 中是 ArrayList 的是 HashMap 的Vector 是通过「在所有对外的公有方法上,直接加同步锁」实现的线程安全。Vector 的底层和 ArrayList 完全一样,都是,区别只在上:ArrayList 的所有方法都是,无任何锁;Vector 的所有核心方法(增删改查、扩容、遍历),都被关键字修饰。

bhffkt的博客 867
下一篇: 简单说说Java的动态代理
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值