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操作在预期并发访问的情况下没有太多意义。