java vector 线程安全_关于Vector到底是不是 线程安全的 问题

线程安全,在java的多并发编程中是重要概念,意思是,多个线程同时操作一个对象,在各种不同情况下,都不会造成不同的后果。

一个经典问题,Vector到底是不是线程安全的?

很多人都会回答,是,vector是线程安全的。

诚然,不止是很多IT教材上是这么写的,就连JDK的作者写的注释也是这么说的。如下图(图为 JDK中Vector的源代码):注释中,红框标记的部分写着:如果你不需要线程安全的实现类,那就推荐你用ArrayList,而不是Vector。言外之意,就是说,Vector是线程安全的。

21241589494a80d5164712c86e0ee35c.png

自己看了源码,发现,确实很多方法都有同步关键字synchronized,从而保证所有的对外接口都会以 Vector对象为锁,即,在vector内部,所有的方法都不会被多线程访问。

但是,单个方法的原子性(注:原子性,程序的原子性即不会被线程调度机制打断),并不能保证复合操作也具有原子性。

(你问 为什么复合操作不能保证原子性? 参见大神的帖子:https://blog.csdn.net/xdonx/article/details/9465489 ,我没太多时间研究细节,所以就只好剽窃大佬的结论了╮( ̄▽ ̄")╭)

所以,这个问题的正确回答应该是:

虽然源代码注释里面说这个是线程安全的,因为确实很多方法都加上了同步关键字synchronized,但是对于符合操作而言,只是同步方法并没有解决线程安全的问题。

要真正达成线程安全,还需要以vector对象为锁,来进行操作。

所以,如果是这样的话,那么用vector和ArrayList就没有区别了,所以,不推荐使用vector。

所以说,就算是JDK,也会有坑,毕竟坑坑更健康,有坑才能引导我们思考,毕竟做程序是理科工作,要有怀疑精神。

其实,具体为什么复合操作不具有原子性,我也没有太深究,可能要从Vector代码里面找根据,有空再探究。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
网络安全试题 部门: 姓名: 成绩: 第一部分 选择题(50分) 1、Ipsec协议主要应用属于哪一层?[ ] A、应用层 B、传输层 C、Internet层 D、网络层 2、黑客搭线窃听属于哪一类风险? [ ] A、信息存储安全 B、信息传输安全 C、信息访问安全 D、以上都不正确 3、有关对称密钥加密技术的说法,哪个是确切的? [ ]   A、又称秘密密钥加密技术,收信方和发信方使用相同的密钥。   B、又称公开密钥加密,收信方和发信方使用的密钥互不相同   C、又称秘密密钥加密技术,收信方和发信方使用不同的密钥   D、又称公开密钥加密,收信方和发信方使用的密钥互不相同 4、典型的针对系统漏洞的DoS攻击方式是:[ ] A、Syn flood B、Smurf C、Ping of Death D、TCP flood 5、在下面的VPN技术中,属于二层的VPN技术是:[ ] A、PPTP VPN B、GRE VPN C、IPSec VPN 6、下面不属于木马特征的是( ) A. 自动更换文件名,难于被发现 B. 程序执行时不占太多系统资源 C. 不需要服务端用户的允许就能获得系统的使用权 D. 造成缓冲区的溢出,破坏程序的堆栈 7、RIP用什么路由算法?[ ] A、link state B、routed information C、link together D、distance vector 8、给出一个地址,前缀为/24,将这些地址用前缀/28来划分子网,可得多少个子网?[ ] A、64 B、128 C、32 D、16 9、( )就是应用程序的执行实例(或称一个执行程序),是程序动态的描述。 A、线程 B、程序 C、进程 D、堆栈 10、WINDOWS主机推荐使用[ ]格式 A、NTFS B、FAT32 C、FAT D、LINUX 11、UNIX系统的目录结构是一种[ ]结构 A、树状 B、环状 C、星状 D、线状 12、[ ]协议主要用于加密机制 A、HTTP B、FTP C、TELNET D、SSL 13、凡是基于网络应用的程序都离不开( )。 A、Socket B、Winsock C、注册表 D、MFC编程 14、为了防御网络监听,最常用的方法是[ ] A、采用物理传输(非网络) B、信息加密 C、无线网 D、使用专线传输 15、向有限的空间输入超长的字符串是[ ]攻击手段。 A、缓冲区溢出 B、网络监听 C、端口扫描 D、IP欺骗 16、使网络服务器中充斥着大量要求回复的信息,消耗带宽,导致网络或系统停止正常 服务,这属于[ ]漏洞 A、拒绝服务 B、文件共享 C、BIND漏洞 D、远程过程调用 17、输入法漏洞通过[ ]端口实现的。 A、21 B、23 C、445 D、3389 18. 一次字典攻击能否成功,很大因素上决定于( )。 A、字典文件 B、计算机性能 C、网络速度 D、黑客经验 19. 信息风险主要指那些?[ ] (A) 信息存储安全 (B) 信息传输安全 (C) 信息访问安全 (D) 以上都正确 20. 下面不属于恶意代码攻击技术的是( )。 A、进程注入技术 B、超级管理技术 C、端口反向连接技术 D、自动生产技术 21. ( )是指有关管理、保护和发布敏感信息的法律、规定和实施细则。 A、安全策略 B、安全模型 C、安全框架 D、安全原则 22. 下面哪个属于对称算法( )。 A、数字签名 B、序列算法 C、RSA算法 D、数字水印 23. ( )用于客户机和服务器建立起安全连接之前交换一系列信息的安全通道。 A、记录协议 B、会话协议 C、握手协议 D、连接协议 24. 通常被认为安防体系的基础的是_____。 [ ] (A) 人 (B) 技术 (C) 制度 (D) 产品 25. WWW的超链接中定位信息所在位置使用的是[ ]。 A. 超文本(hypertext)技术 B. 统一资源定位器(URL,Uniform Resource Locators) C. 超媒体(hypermedia)技术 D. 超文本标记语言HTML 第二部分 判断题(10分) ( )1.网络安全应具有以下四个方面的特征:保密性,完整性,可用性,可查性。 ( )2.现代密码体制把算法和密钥分开,只需要保证密钥的保密性就行了,算法是可以公开的 。 ( )3.拒绝服务攻击属于被动攻击的一种。 ( )4.DES 算法中对明文的处理过程分 3 个阶段: 首先是一个初始置换 IP, 用于重排明文分组的 64 比特数据. 然后是具有相同功能的 64 轮变换,每轮中都有置换和代换运算.最后是一个逆初始置换从而产生 64 比特的密文。 ( )5.公开密钥密码体制比对称密钥密码体制更为安全。 ( )6.Diffie-Hellman 算法的
Vector是一个线程安全的类,它的方法都是同步的,并且明确设计为在多线程环境中工作。然而,它的线程安全性是有限制的。在某些方法之间存在状态依赖,如果在迭代过程中Vector被其他线程修改,通过Vector.iterator()返回的迭代器会抛出ConcurrentModificationException异常。因此,虽然Vector的方法都加上了同步关键字synchronized,但对于复合操作而言,只是同步方法并没有解决线程安全问题。要真正实现线程安全,需要以Vector对象为锁来进行同步处理。这样才能保证在调用Vector的成员方法时,其他线程不能再访问该Vector对象,避免出现预期之外的结果。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [Vector线程安全](https://blog.csdn.net/xuxin132133/article/details/88068120)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Vector线程安全问题](https://blog.csdn.net/A12115419/article/details/121145752)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值