java – guava-libraries:是Iterators.cycle()线程安全吗?

假设我有以下类:
public class Foo {  

    private List<Integer> list = Lists.newArrayList(1,2,3,4,5);
    private Iterator<Integer> iterator = Iterators.cycle(list);  

    public void bar(){  
        Integer value = iterator.next();  
        doSomethingWithAnInteger(value);
    }  
}

如果Foo的一个实例被两个线程同时访问,我需要每个线程从iterator.next()获取一个不同的值. bar()方法是否必须同步?还是iterator.next()保证线程安全?

在这个例子中,我使用一个ArrayList作为底层的Iterable.循环迭代器的线程安全性是否取决于具体的可迭代实现?

谢谢.

解决方法

Guava中几乎没有任何东西保证线程安全,除非这样记录.

您不必同步整个条形法,但您应该将该调用包装到同步块中的iterator.next()中.例如:

public void bar(){  
    Integer value;
    synchronized (iterator) {
        value = iterator.next();  
    }
    doSomethingWithAnInteger(value);
}

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...