首先提一个问题,Vector是线程安全的吗?

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

确实,通过查看JDK源码中,Vector确实是线程安全的,至少Vector的作者是这么说的。

通过观察源码,发现 Vector 类中的大部分方法都是由 synchronized 关键字来修饰的,这也就保证了所有的对外接口都会以 Vector 对象为锁。访问 Vector 的任何方法都必须获得对象的 intrinsic lock (或叫 monitor lock ),所以在Vector内部,所有的方法都不会被多线程访问。

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

详见贴子:https://blog.csdn.net/xdonx/article/details/9465489

所以,Vector 真的是线程安全的吗?正确答案如下:
虽然源代码注释里面说这个是线程安全的,因为确实很多方法都加上了同步关键字 synchronized ,但是对于复合操作而言,只是同步方法并没有解决线程安全的问题。要真正达成线程安全,还需要以 Vector 对象为锁,来进行同步处理。

复合操作:
Vector 所谓的线程安全是指调用 Vector 类的成员方法时,其他线程不能再访问该Vector对象。但是在调用两个Vector成员方法时,当前线程有可能再完成第一个方法后时间片到期,这时其他线程可以访问该Vector对象,造成调用第二个成员方法的结果可能与预想结果不同。这时为了保证线程安全,需要加synchronized。

所以,Vector 应该尽早地被废除,因为这样做本身没有解决多线程问题,反而,在引入了概念的混乱的同时,导致性能问题,因为 synchronized 的开销是巨大的:阻止编译器乱序,hint for 处理器寄存一/二级缓存。。。

参考文章:https://www.cnblogs.com/hankzhouAndroid/p/8716279.html

Vector的线程安全问题相关推荐

  1. 关于 智能指针 的线程安全问题

    先说结论,智能指针都是非线程安全的. 多线程调度智能指针 这里案例使用的是shared_ptr,其他的unique_ptr或者weak_ptr的结果都是类似的,如下多线程调度代码: #include ...

  2. servlet单实例多线程 ---线程安全问题是由实例变量造成的,只要在Servlet里面的任何方法里面都不使用实例变量,那么该Servlet就是线程安全的。(所有建议不要在servlet中定义成员变

    Servlet 单例多线程 Servlet如何处理多个请求访问? Servlet容器默认是采用单实例多线程的方式处理多个请求的: 1.当web服务器启动的时候(或客户端发送请求到服务器时),Servl ...

  3. java线程安全问题原因及解决办法

    1.为什么会出现线程安全问题 计算机系统资源分配的单位为进程,同一个进程中允许多个线程并发执行,并且多个线程会共享进程范围内的资源:例如内存地址.当多个线程并发访问同一个内存地址并且内存地址保存的值是 ...

  4. java 线程安全问题_java线程安全问题原因及解决办法

    1.为什么会出现线程安全问题 计算机系统资源分配的单位为进程,同一个进程中允许多个线程并发执行,并且多个线程会共享进程范围内的资源:例如内存地址.当多个线程并发访问同一个内存地址并且内存地址保存的值是 ...

  5. 多线程中的线程安全问题

    多线程中的线程安全问题 概述: ​ 多条线程在操作同一个资源的时候发生的数据交叉问题就是线程安全问题 产生原因: ​ 多条线程操作同一个资源 解决思路: ​ 要线程排队解决安全问题,设定权限. 如何设 ...

  6. 【Java 并发编程】【05】线程安全问题与线程同步

    5. 线程安全问题与线程同步 多线程编程是有趣且复杂的事情,它常常容易突然出现"错误情况",这是由于系统的线程调度具有一定的随机性.即使程序在运行过程中偶尔会出现问题,那也是由于我 ...

  7. JUC线程安全问题阶段二

    线程问题 4.1 线程出现问题的根本原因分析 线程出现问题的根本原因是因为线程上下文切换,导致线程里的指令没有执行完就切换执行其它线程了,下面举一个例子 static int count = 0;pu ...

  8. ArrayList 线程安全问题

    前言 在观看多线程书籍的时候,经常会看到大家提及ArrayList与HashMap时候.皆会说明, ArrayList与HashMap类型都不是线程安全的. 那么,在传统的集合包内的集合类到底为什么线 ...

  9. Java并发编程(8)——常见的线程安全问题

    线程安全问题: 多个线程同时执行也能工作的代码就是线程安全的代码 如果一段代码可以保证多个线程访问的时候正确操作共享数据,那么它是线程安全的. 具体说明: java并发线程实战(1) 线程安全和机制原 ...

最新文章

  1. JUnit 3.8 通过反射测试私有方法
  2. 用隐马尔可夫模型(HMM)做命名实体识别——NER系列(二)
  3. OpenCV立体校准stereo calib的实例(附完整代码)
  4. 二进制搜索算法_二进制搜索的一个扭曲故事
  5. Flurry调查报告:图片和视频应用增长速度最快
  6. LeetCode 1058. 最小化舍入误差以满足目标(排序+贪心)
  7. C++ opencv的一些基础知识
  8. vue、bus 使用遇到的坑,组件之间无法传值;vue、bus 第一次获取不到值,后面再点击重复执行
  9. 计算机病毒对消息钩子的利用与对抗
  10. python的判断与循环
  11. oracle java vm,我可以使用Oracle Java 7 HotSpot VM安装DCEVM吗?
  12. SQL 获取本周日期
  13. 爱客影视 程序存在文件写入漏洞 分析
  14. 桌面计算机 回收站图标,桌面回收站图标不见了?回收站图标没了?3种方法快速解决...
  15. MFC原理与方法(一)
  16. 电脑上如何禁止一切弹窗广告?永久关闭桌面弹出广告
  17. 【WangEditor】使用富文本编辑器 WangEditor 实现用户自定义图片大小(改js源码)
  18. 梦幻模拟战手游服务器维护,梦幻模拟战手游11月21日更新公告 执行者降临限时召唤开启[多图]...
  19. 驱动以SN码获取流程定制Barcode属性
  20. 豆瓣创始人阿北:豆瓣的去中心化

热门文章

  1. Apache Flink 漫谈系列(08) - SQL概览
  2. c#基础---控制台应用程序飞行棋
  3. 关于廊坊师范学院信息技术提高班调查研究报告
  4. sql server 2012安装、升级折腾记录
  5. 软件工程测验题+作业题【第1、4-8章】
  6. 中兴交换机查收光_广西中兴ZXR10 5250-52TS-L仅售2500元-中兴 ZXR10 5250-52TS-L_交换机行情...
  7. 这届618:看似平静,实则热火朝天
  8. strchr函数用法
  9. css动画 @keyframes和animation
  10. 悄悄地上线了 | 研学分享 | 的官网~