在synchronized方法中使用时的hashmap迭代器

时间:2015-06-16 15:12:03

标签: java multithreading hashmap

所以,让我们说我有一个看起来像的Hashmap:

键:值

(字符串1,队列1)

(字符串2,队列2)

(字符串3,队列3)

我还有一个将访问此hashmap的synchronized方法,并在方法内创建一个迭代器:

 Iterator it = hashmap.iterator();
 while(it.hasNext()){
      Queue q = it.next();
      QueueItem item = q.get(0);
      return item;
 }

现在我有2个线程调用此方法,当线程1调用时,它将获得一个指向(字符串1,队列1)的迭代器;我的问题是当线程2调用时,迭代器是指向(字符串1,队列1)还是(字符串2,队列2)?

1 个答案:

答案 0 :(得分:3)

调用 iterator()会在集合的开头创建一个 new 迭代器,因此它总是会为您提供Map实现的第一个条目。

使用HashMap时,未定义排序,但您可以使用其他Map实现来控制排序(LinkedHashMap,TreeMap,...)