【发布时间】:2021-07-08 13:01:49
【问题描述】:
我有一种情况,我需要在一个线程中获取队列的结束索引,然后在稍后的某个时间点从另一个线程继续读取它。
如果是同一个线程,这将是微不足道的。我只需创建一个tailer,移动到结尾,然后在我准备好时从该tailer 开始阅读。
文档指出,使用来自多个线程的尾部将导致未定义的行为。我认为使用 .createTailer().direction(FORWARD).toEnd() 在一个线程中创建一个 Tailer,然后在另一个线程中从该 Tailer 中读取将违反合同。如果没有,请告诉我,因为这是最简单的解决方案。
我尝试做的是:
bookmarkTailer = queue.createTailer().direction(FORWARD).toEnd();
bookmarkIndex = bookmarkTailer.index(); //Left open to ensure file doesn't expire
doAsync(()-> {
tailer = queue.createTailer();
if (!tailer.moveToIndex(index)) {
//fail
}
}
但是 moveToIndex() 调用总是失败。
【问题讨论】: