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代码里面找根据,有空再探究。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/538479.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# Winform使用Windows Media Player播放多媒体整理

一、简单使用示例步骤 1.添加Windows Media Player 组件当前是系统的 Com组件 工具箱》右键“选择项”》选择Com组件 2.控件拖拽到桌面,使用 private void button1_Click(object sender, EventArgs e) {//播放开始声音axWindowsMediaPlayer2.URL "start.mp3&q…

618选购手机正当时,好评率高达99%的手机了解一下!

一年一度的京东618年中购物狂欢节如火如荼的进行中,手机厂商们都使出了浑身解数,对消费者进行争夺。对于用户来说,618绝对是更换手机的好时机。不过,小伙伴们面对市场上的众多机型,也有可能挑花了眼,不知道…

IntelliJ IDEA 2017.2 x64 安装Scala

从官网下载好IntelliJ IDEA 和scala IntelliJ IDEA 安装scala插件 新建scala项目 建好后,发现src右键--新建---没有 .scala选项 解决方法

Django-ORM数据库操作

背景 Django框架功能齐全自带数据库操作功能,由于工作中设计巨量的api接口,需要一个很好的web后端服务框架,Django给了莫大的帮助。本文主要介绍Django的ORM框架我们一般对数据库的使用的认识是: 创建数据库,设计表结构…

Kingback小组冲刺博客

一、6月13日 1、今日完成的任务 李可欣 项目首页的框架设计 项目首页的导航栏部分 对于项目的配色进行了改进,并且设计了logo 杨帆 今天进行了数据库的设计,完成了数据库的增删改查,并建立了两个jsp页面,还学习了一些数据库设计的…

使用Git上传本地项目到oschina

原文地址:https://my.oschina.net/158/blog/530112 --------------------------------------------- 1.首先看一下自己是否有公钥, 在 我的资料-->SSH公钥 查看,如果没有,添加自己的SSH 公钥: SSH key 可以让你在…

整数数组按绝对值排序

2019独角兽企业重金招聘Python工程师标准>>> 题目: 给出一组整数数组,要求按照绝对值从小到大进行排序后输出。 可以用经典的冒泡排序法来计算此问题,计算过程: 1、比较相邻两个元素绝对值,如果第一个比第二…

pearson相关系数_pearson相关系数与典型相关性分析(CCA)

本文主要介绍相关系数的概念,以及简单相关系数中的pearson相关系数及其局限性。随后介绍pearson相关系数无法解决的问题(两个变量组之间的相关性问题)的解决方案。1、pearson相关系数在日常中,我们经常会遇到一些关于相关性的分析,例如&#…

seo自动工具_爱站SEO工具包详细介绍

爱站SEO工具-seoer的瑞士军刀!这个工具主要是为了方便SEOer查询一些网站的问题,监控关键词排名收录等等,新手老手都可以用的工具,更快的让SEOer上手。相信有很多SEOer都使用过爱站SEO工具包,也有很多新入行的小伙伴可能…

人物三(依芙蒂法)

转载于:https://www.cnblogs.com/song1900/p/9189921.html

XML文件结构和基本语法

XML文件的结构性内容,包括节点关系以及属性内容等等。元素是组成XML的最基本的单位,它由开始标记,属性和结束标记组成。就是一个元素的例子,每个元素必须有一个元素名,元素可以若干个属性以及属性值。 xml文件和html文…

fatal: Could not read from remote repository.的解决办法

原文地址:http://blog.csdn.net/huahua78/article/details/52330792 --------------------------------------------------------------------------------- 查看远端地址 git remote –v 查看配置 git config --list git status git add . // 暂存所有的更改git…

springmvc是什么_SpringBoot与SpringMVC的区别是什么?

简单的来说:SpringMVC和SpringBoot都是Spring家族的重要成员。Spring家族的使命就是为了简化而生。SpringMVC简化我们日常Web开发的,后来随着自身的发展,SpringMVC变得臃肿复杂,而SpringBoot则进一步简化了SpringMVC开发。SpringM…

git 上传代码到码云

与码云建立连接教程:http://blog.csdn.net/zengmingen/article/details/76045076 如果完成了上面步骤的,且有了git。上传项目步骤: 代码提交 代码提交一般有五个步骤: 1.查看目前代码的修改状态 2.查看代码修改内容 3.暂存需要提交…

visual studio过期登录不了账户_具有最高管理权限账户,Windows 7设置Administrator密码永不过期...

今天介绍操作系统具有最高管理权限的账户,Windows 7如何设置Administrator账户密码永不过期。小伙伴们可能不知道,和Windows Vista操作系统一样,在Windows 7操作系统中是不能预先使用Administrator这个具有最高管理权限的账户的。同时也可能不…

cad隐藏图层命令快捷键_cad快捷键f是什么命令?cad中f快捷键都有哪些?

1. F1 该功能键打开AutoCAD帮助窗口。如果用户遇到此软件中的任何功能问题,它可以使用户在线获得帮助。如果用户离线工作,而不是按此键,则该软件的所有功能都将以PDF格式打开。 2. F2 该键将打开一个弹出屏幕,在底部显示命令行。该命令对于在屏幕底部看不到命令窗口的用户很…

java 高级编程进阶_JAVA高级编程之hibernate进阶学习

二级缓存hibernate的session缓存在事务级别进行持久化数据的缓存操作。 当然,也有可能分别为每个类(或集合),配置集群、或 JVM 级别(SessionFactory 级别)的缓存。你甚至可以为之插入一个集群的缓存。注意,缓存永远不知道其他应用程序对持久化…

SpringMvc+Tomcat+Angular4 部署运行

这次的团队开发是,前端开发人员和后台开发人员完全分开开发的。 前端开发采用了Angular4,webstorm 后端开发采用了:springspringmvcmybatis,eclipse --------------------------------------- 最后要整合了。 1、angular项目编…

IPv4地址分类及特征

IPv4地址分类及特征 IP地址后斜杠和数字代表的意思 其中有这样一个IP地址的格式:IP/数字,例如:111.222.111.222/24这种格式平时在内网中用的不多,所以一下子看不懂,最后查了资料才知斜杠后的数字代表的是掩码的位数 “…

查看Scala编译的.class文件

Scala是基于JDK运行的,必然会生成Java的字节码文件.class文件。 如何查看? 编码IDE:IntelliJ IDEA 2017.2 x64 查看class文件工具:jd-gui scala代码如下: person.scala package cn.zengmg.day26class Person {val …