Java的JDK中是否有一个并发列表?

我如何创build一个并发的List实例,我可以通过索引访问元素? JDK是否有我可以使用的任何类或工厂方法?

java.util.concurrent中有一个并发列表实现。 特别是CopyOnWriteArrayList 。

你可以很好地使用Collections.synchronizedList(List),如果你需要的只是简单的调用同步:

  List<Object> objList = Collections.synchronizedList(new ArrayList<Object>()); 

如果你不关心基于索引的访问,只想要List的插入顺序保留特性,你可以考虑一个java.util.concurrent.ConcurrentLinkedQueue 。 由于它实现了Iterable,所以一旦添加完所有的项目,就可以使用简化的for-each语法遍历内容:

 Queue<String> globalQueue = new ConcurrentLinkedQueue<String>(); //Multiple threads can safely call globalQueue.add()... for (String href : globalQueue) { //do something with href } 

因为获取位置并从给定位置获取元素的行为自然需要一些locking(您不能让列表在这两个操作之间有结构上的变化)。

并发收集的想法是每个操作本身是primefaces的,可以在没有明确的locking/同步的情况下完成。

因此,从给定List获取位置n的元素作为primefaces操作在预期并发访问的情况下没有太多意义。