论坛首页 Java企业应用论坛

java.util包(一)

浏览 14575 次
该帖已经被评为良好帖
作者 正文
   发表时间:2006-09-27  
同步不是哪一句话
而是看效果
看看头一个用了it 在删除元素之后就不能同步了
而后一个删除元素之后就出现了不同步的问题
0 请登录后投票
   发表时间:2006-09-27  
   帖子不错,不过问题也有。首先疑惑楼主看得ArrayList的实现代码是哪个公司的?对于一般大众使用的
SUN的JDK或者JRE来说。是有蛮多不同的。或者,楼主用的版本是否是JDK1.6?
    我就简单列一下文中的一些问题吧。
1.ArrayList并没有对writeObject和readObject进行同步,因为这两个方法在ArrayList中是私有方法,这两个方法是不会给ArrayList本身调用的,所以也不需要去同步。
2.ArrayList每次扩容,并不是每次都扩大到原来大小的1.5倍。对于新增加的元素,ArrayList首先会尝试扩大1.5倍(记忆中JDK1.3和JDK1.4都是尝试扩大2倍),如果依然小于新增加的容积,方法会直接将容积扩大至原有容积+新增容积。
3.iterator()中的同步 , 楼主也许只是想说明modcount的计数器的检查(而且这个modcount也没有楼主想像得那么强大,它只是相当于一个计数器罢了),但是同步这个词,容易让人跟synchronized相混淆,ArrayList中对于iterator是没有同步保护的。

   楼主能花精力去看JDK的源代码,并还很细致,的确不错。不过在写文章时,有些表达就要再雕琢些。否则许多朋友粗略一看,会很容易误解的。
0 请登录后投票
   发表时间:2006-09-27  
抛出异常的爱 写道

同步不是哪一句话
而是看效果
看看头一个用了it 在删除元素之后就不能同步了
而后一个删除元素之后就出现了不同步的问题


我说的同步指得是语言层次的
你这里说的只是针对iterator模式一种不正确的使用而已,这样操作会抛出异常,还谈什么同步呀,
就好象你用静态方法去操作实例变量一样,本身就是错的。
arraylist的iterator()方法 生成的是一个迭代器类(内部类)
用它进行迭代操作的时候,删除元素的操作就不能使用arraylist本身的方法了。

具体原因我们可以看这篇文章:
http://gceclub.sun.com.cn/yuanchuang/week-14/iterator.html
0 请登录后投票
   发表时间:2006-09-27  
凤舞凰扬 写道
   帖子不错,不过问题也有。首先疑惑楼主看得ArrayList的实现代码是哪个公司的?对于一般大众使用的
SUN的JDK或者JRE来说。是有蛮多不同的。或者,楼主用的版本是否是JDK1.6?
    我就简单列一下文中的一些问题吧。
1.ArrayList并没有对writeObject和readObject进行同步,因为这两个方法在ArrayList中是私有方法,这两个方法是不会给ArrayList本身调用的,所以也不需要去同步。
2.ArrayList每次扩容,并不是每次都扩大到原来大小的1.5倍。对于新增加的元素,ArrayList首先会尝试扩大1.5倍(记忆中JDK1.3和JDK1.4都是尝试扩大2倍),如果依然小于新增加的容积,方法会直接将容积扩大至原有容积+新增容积。
3.iterator()中的同步 , 楼主也许只是想说明modcount的计数器的检查(而且这个modcount也没有楼主想像得那么强大,它只是相当于一个计数器罢了),但是同步这个词,容易让人跟synchronized相混淆,ArrayList中对于iterator是没有同步保护的。

   楼主能花精力去看JDK的源代码,并还很细致,的确不错。不过在写文章时,有些表达就要再雕琢些。否则许多朋友粗略一看,会很容易误解的。

sigh...主贴还是一个转抄,原文在:
http://blog.csdn.net/robertb9527/archive/2004/10/09/129989.aspx
---
找了一圈,全是抄袭的,这种风气真让人郁闷.想和原作者讨论还找不到
0 请登录后投票
   发表时间:2006-09-28  
When iterating on a multi-thread shared list, make a clone of it and then loop on the copy.

BTW, Is this blogger one of One Piece fans?
0 请登录后投票
   发表时间:2006-09-28  
goncha 写道
When iterating on a multi-thread shared list, make a clone of it and then loop on the copy.

BTW, Is this blogger one of One Piece fans?


how about the One Piece?
i like  One Piece ,but i think the One Piece didn't appear when this article was written 
0 请登录后投票
   发表时间:2006-09-28  
引用
要确保遍历过程顺利完成,必须保证遍历过程中不更改集合的内容(Iterator的remove()方法除外),因此,确保遍历可靠的原则是只在一个线程中使用这个集合,或者在多线程中对遍历代码进行同步

(Iterator的remove()方法除外),
有一阵子想找这个功能但是没找到只好toArray()后完成了这种功能。。。看来看API不细啊
或者在多线程中对遍历代码进行同步
原来是这么番译的。。。。。汗。。。。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics