The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:
Iterator 是 Java 中的一个基本接口之一,从 Java 1.2 开始引入。它应该是非常简单的;然而,在我的经验中,许多 Java 开发人员都不知道如何实现自定义的迭代器,这个迭代器应该迭代来自其他来源的数据流。换句话说,它成为了另一个数据源的适配器,以迭代器的形式存在。我希望这个例子能帮到你。
假设我们有一个这个类的对象:
当我们调用read()
时,它会返回一个从某个地方检索到的新字节数组。如果没有要检索的内容,该数组将为空。现在,我们想要创建一个适配器,它可以消耗这些字节并让我们迭代它们。
这是它应该看起来的样子(它不是线程安全的!):
没有办法使它线程安全,因为迭代过程在迭代器的范围之外。即使我们将方法声明为synchronized
,也无法保证当两个线程同时调用hasNext()
和next()
时不会发生冲突。所以不要费心去处理这个问题,只需将迭代器标记为不线程安全,然后让使用它的用户在必要时进行更高级别的同步。
Translated by ChatGPT gpt-3.5-turbo/42 on 2024-01-09 at 18:11