Ota*_*edo 11 java iterator thread-safety guava
假设我有以下课程:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
如果一个Foo实例被两个线程同时访问,我需要每个线程从中获取不同的值iterator.next().该bar()方法是否必须同步?或者iterator.next()保证是线程安全的?
在这个例子中,我使用ArrayList作为底层的Iterable.循环迭代器的线程安全性是否依赖于特定的可迭代实现?
谢谢.
Lau*_*ves 11
除非另有说明,否则Guava中几乎没有任何东西可以保证是线程安全的.
您不必同步整个bar方法,但是应该在同步块中包含对iterator.next()的调用.例如:
public void bar(){
Integer value;
synchronized (iterator) {
value = iterator.next();
}
doSomethingWithAnInteger(value);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4204 次 |
| 最近记录: |