我有一个列表,我需要通过两个线程遍历该列表。一种是从上到下阅读,另一种是从下到上阅读。当它们相交时,阅读应该停止。
为了迭代列表,我可以使用 ListIterator,但我无法想象这些线程如何从同一个列表中读取?
最佳答案
由于线程只是读取,因此无需使用列表的线程安全版本。
为了确保线程在相交时停止读取,您需要同步它们,因此在读取另一个项目之前,它们应该检查该项目是否可用。实现此目的的一种简单方法是将当前索引存储在每个线程中,并让其他线程可以访问该索引(确保同步该索引)。但这会导致大量开销。
更好的想法是分批工作。将列表分成几个部分,例如 16 个项目。然后线程可以在需要检查交集之前读取整个批处理。
关于java - 两个线程从不同的端读取相同的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45053552/