gpt4 book ai didi

java - Guava 库 : is Iterators. cycle() 线程安全?

转载 作者:搜寻专家 更新时间:2023-10-30 21:23:40 26 4
gpt4 key购买 nike

假设我有以下类(class):

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 中几乎没有任何内容可以保证是线程安全的,除非这样记录。

您不必同步整个 bar 方法,但您应该将对 iterator.next() 的调用包装在同步块(synchronized block)中。例如:

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

关于java - Guava 库 : is Iterators. cycle() 线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4493643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com