加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Lucene IndexWriter线程安全

发布时间:2020-12-14 16:33:22 所属栏目:Java 来源:网络整理
导读:Lucene鼓励从多个线程重用IndexWriter. 假设两个线程可能引用了IndexWriter,如果线程A在作者上调用close,则线程B将留下无用的作者.但是据我了解,lucene不知何故知道另一个线程使用同一个作者,并延续其关闭. 这是真的吗? lucene如何跟踪另一个线程使用作者?
Lucene鼓励从多个线程重用IndexWriter.

假设两个线程可能引用了IndexWriter,如果线程A在作者上调用close,则线程B将留下无用的作者.但是据我了解,lucene不知何故知道另一个线程使用同一个作者,并延续其关闭.

这是真的吗? lucene如何跟踪另一个线程使用作者?

编辑
从答案来看,关闭IndexWriter是不正确的.但是这带来了一个新的问题:如果一个IndexWriter保持打开,基本上阻止从另一个JVM访问此索引(例如,在集群的情况下,或许多应用程序之间的共享索引).

解决方法

如果一个线程在其他线程仍在使用它的情况下关闭IndexWriter,则会得到不可预测的结果.我们尝试让其他线程击中AlreadyClosedException,但这只是最好的努力(不能保证). EG你也可以轻松地打NullPointerException.所以你必须同步外部,以确保你不这样做.

最近(现在只有Lucene的主干,最终要4.0),IndexWriter里面的一个大线程瓶颈是固定的,允许段刷新并发运行(以前它们是单线程的).在并发硬件上运行许多索引线程的应用程序上,可以大大提升索引的吞吐量.详见http://blog.mikemccandless.com/2011/05/265-indexing-speedup-with-lucenes.html.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读