A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 贾振凯 中级黑马   /  2013-3-26 20:32  /  2145 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 贾振凯 于 2013-3-27 20:16 编辑


Collections里面的这些synchronized打头的方法返回的
都是相应集合类的支持同步的线程安全的版本
可为什么API上说:
synchronized(collection) {
      Iterator i = collection.iterator(); // Must be in the synchronized block
      while (i.hasNext())
          foo(i.next());
  }
要迭代还是必须放在同步代码块中!


这上下两个同步怎么个关系,,,,懵!!

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-27 19:55

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

4 个回复

倒序浏览
e ...要我说呢

要同步。做好用vector,

还有hashtable

你觉得呢
回复 使用道具 举报
轻量级的东东不靠谱


原子性什么的,最好别用
回复 使用道具 举报

你确定你没有用错吗?
看看我写的吧!

package test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;


public class RegServer  {
        public static void main(String[] args) {
                //定义一个线程不安全的集合。
                List<Integer> coll=new ArrayList<Integer>();
                //添加元素。
                        coll.add(111);
                        coll.add(222);
                        coll.add(333);
                       
                        //将一个不线程不安全的集合转成一个安全的集合。
                List <Integer> list=Collections.synchronizedList(coll);
                //迭代集合
                        Iterator<Integer> it=list.iterator();
                       
                        //遍历集合。
                        while(it.hasNext()){
                                //取出元素。
                                Integer val=it.next();
                                //打印元素。
                                System.out.println(val);
                        }
        }
}
//运行结果:
/*
111
222
333
*/

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
itserious 发表于 2013-3-26 20:54
你确定你没有用错吗?
看看我写的吧!

呃.............我下边那段小代码是API上的,不理解怎么回事儿........................
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马