CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 扩展类

用ArrayList(假设list是一个ArrayList的实例)加上synchronized关键字,是不是也能达到Vector那样的线程安全的效果?

楼主Achilles_KG(Razer Diamondback && Razer eXactMat)2005-01-03 12:17:38 在 Java / J2SE / 扩展类 提问

如果说Vector是线程安全的,那么我用ArrayList,假如list是一个ArrayList的实例,我加上了这synchronized(list);效果不就和Vector一样了吗?  
  请指点!  
  问题点数:10、回复次数:6Top

1 楼lizzz(不是程序员)回复于 2005-01-03 12:44:08 得分 7

表面上看好像功能是一样的,我觉得其实不然  
   
  首先list这样做属于对象锁,而Vector属于类锁。  
  对象所的执行先后顺序取决于CPU的轮转,比如所两个线程在同时(有时间先后)分别调用get和remove方法的时候,假设get线程先进入,remove线程才进入。这是两个线程指令的执行顺序取决于CPU下一条指令是执行get线程还是remove线程。但使用Vector就不可能会有这种问题。一旦一个线程在使用另外的线程就没有办法使用(不要说同时/无差别执行,CPU的运行总是一条一条的指令的执行的)  
   
  这是我的一些认识,不一定正确。Top

2 楼lizzz(不是程序员)回复于 2005-01-03 12:46:11 得分 0

最好的验证方法就是将这总现象放大,例如在remove   线程的同步之前加上一个延时。Top

3 楼zealVampire(白鹤泉)回复于 2005-01-03 14:06:24 得分 3

vector好像是方法同步,   去看看jdk/src里面vector代码  
  应该只是保证同一时刻只有一个线程调用一对象的一方法。Top

4 楼lizzz(不是程序员)回复于 2005-01-03 14:18:24 得分 0

对阿,所以它能够保证线程安全,但是对list加同步的方法。我认为并不能够实现真正的线程安全。Top

5 楼Achilles_KG(Razer Diamondback && Razer eXactMat)回复于 2005-01-03 15:18:21 得分 0

jdk/src?不好意思,问一jdk哪个版本开源了啊?我一直用的是1.4xTop

6 楼lizzz(不是程序员)回复于 2005-01-03 15:24:36 得分 0

所有版本,安装的时候好像可以选择是否安装源码。Top

相关问题

  • VB关键字
  • 关键字
  • 关键字问题
  • 问 extern 关键字
  • C#的关键字
  • 关键字:TableCellRenderer TableCellEditor
  • 过滤关键字
  • 关键字互换
  • 关键字过滤
  • 用 synchronized 关键字怎么没效果?请高手指点这一段小小小小的程序

关键词

  • 线程
  • vector
  • 安全
  • 指令
  • 执行
  • jdk
  • cpu
  • arraylist
  • 加上
  • 方法

得分解答快速导航

  • 帖主:Achilles_KG
  • lizzz
  • zealVampire

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo