java – guava-libraries:是Iterators.cycle()线程安全吗?
发布时间:2020-12-15 00:00:04 所属栏目:Java 来源:网络整理
导读:假设我有以下类: public class Foo { private ListInteger list = Lists.newArrayList(1,2,3,4,5); private IteratorInteger iterator = Iterators.cycle(list); public void bar(){ Integer value = iterator.next(); doSomethingWithAnInteger(value); }
假设我有以下类:
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); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |