我在大约4GB的数据集上实现了一个XML Sax解析器。
我处理这个数据集,并构建了几个输出对象。
然后必须将这些对象作为迭代器发送到另一个服务。
一开始我想完成解析,将对象存储在一个文件中,然后通过读取它在迭代器中检索它们。
我想知道如何异步执行此操作,即在迭代器的next()
方法中等待,直到解析器提供新内容为止。
谢谢。
答案 0 :(得分:2)
您似乎有一个经典的制作人/消费者计划。
解决此类问题的最简单方法是让生产者(即解析器,在其自己的线程中运行),将读取项目存储到BlockingQueue,并拥有使用者(即服务,在其自己的线程中运行) )从这个BlockingQueue中读取项目。
要表示解析的结束,您可以使用特定对象并将其添加到队列中,或者更改共享对象的状态(以线程安全的方式),消费者在读取下一个项目之前进行检查从队列中。