java - 两个线程从不同的端读取相同的列表

标签 java multithreading listiterator

我有一个列表,我需要通过两个线程遍历该列表。一种是从上到下阅读,另一种是从下到上阅读。当它们相交时,阅读应该停止。

为了迭代列表,我可以使用 ListIterator,但我无法想象这些线程如何从同一个列表中读取?

最佳答案

由于线程只是读取,因此无需使用列表的线程安全版本。

为了确保线程在相交时停止读取,您需要同步它们,因此在读取另一个项目之前,它们应该检查该项目是否可用。实现此目的的一种简单方法是将当前索引存储在每个线程中,并让其他线程可以访问该索引(确保同步该索引)。但这会导致大量开销。

更好的想法是分批工作。将列表分成几个部分,例如 16 个项目。然后线程可以在需要检查交集之前读取整个批处理。

关于java - 两个线程从不同的端读取相同的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45053552/

相关文章:

java - GAE 数据存储 API 直接替换

java 如果一次运行一个线程为什么需要同步

java - 在 HashMap Java 上迭代两次

java - 为什么当我按类(而不是接口(interface))包装由JDK动态代理包装的查找bean时,为什么没有遇到任何异常?

java - Wicket 7 无法在表单树中找到组件

安卓异步WebView

android - 如何将线程中的数据/流实时传递到 Android 中的 Activity ?

c++ - 如何使用迭代器在列表中导航? (C++)

java - 为什么 list-iterator.next();返回到 "no current element"位置,除非迭代多次直到结束?

java - 在 FreeMarker 中,如何自动将自定义对象(例如 java.awt.Color)转换为特定的字符串值(例如 HTML 十六进制颜色)?