Conllection 同步 iterator 的问题

Eric77 2005-07-24 07:00:10
在一个多线程的程序里面 有一个

Collection list = new LinkedList();

在一个方法里面会调用

public void methodOne{

Iterator it = list.iterator();

while(it.hasNext()){
XX x = (XX)it.next();
//do something
}
}

另外的方法会使用

public void methodTwo{

synchronized(list){
list.add(sth);
}

}

我想问一下 除了把methodOne 函数或者函数内容加上 synchronized

eg:
1.public synchronized void methodOne(){
...
}

2.public void methodOne(){

Iterator it = list.iterator();

synchronzied(list){
while(it.hasNext()){
... ...
}

}

这两种方法来同步list 还有没有其他的方法来同步iterator了?
Colletions.synchronizedColleciton(xxx) 方法返回的Object 也不能同步iterator 必须要自己来保证.

我认为
synchronzied(list){
while(it.hasNext()){
... ...
}
会太影响性能了 因为有很多连接都在不停的查询

请问大家有没有好一点的 同步iterator的方法 Thx. :)
...全文
279 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eric77 2005-07-27
  • 打赏
  • 举报
回复
synchronized 是同步的意思 没概念去看书阿
dbx2005 2005-07-25
  • 打赏
  • 举报
回复
对于同步得实现也就只有这两种方法能够实现了,应该不会再有别得方法了

至于你说得这会很影响性能那是必然得,因为你想要实现线程得安全那就必须得付出这样得代价了

对于有位仁兄所说得ArrayList本身就是线程安全得这是不对得,因为Vector才是线程安全得它本身才被实现了同步
Eric77 2005-07-25
  • 打赏
  • 举报
回复
自己顶起来 :
believefym 2005-07-25
  • 打赏
  • 举报
回复
还是想知道synchronize的具体含义,没什么概念
Eric77 2005-07-25
  • 打赏
  • 举报
回复
谢谢大家的回答 :)
believefym 2005-07-24
  • 打赏
  • 举报
回复
有人能解释一下synchronized吗,知道是同步,不过没什么概念
yzhou_swnu 2005-07-24
  • 打赏
  • 举报
回复
表示关注!
Eric77 2005-07-24
  • 打赏
  • 举报
回复
to ermao0709

ArrayList不是线程安全的阿 在API里写了是 Note that this implementation is not synchronized.

它的源码是这样的
eg:
public Object getFirst() {
if (size==0)
throw new NoSuchElementException();

return header.next.element;
}

public Object removeLast() {
Object last = header.previous.element;
remove(header.previous);
return last;
}

不安全,你说的线程安全是不是再说Vector阿 我用的是1.4.08的SDK 还不是安全的 :(

share_gooday 2005-07-24
  • 打赏
  • 举报
回复
记得好象是ArrayList它本身就是多线程安全的
那是不是就不用烤炉同步的问题了
mituzhishi 2005-07-24
  • 打赏
  • 举报
回复
想要控制并发性只能这样子,

想不出什么好的方法。

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧