lucene能够很好地支持多线程/进程 访问。
1.并发读
一个索引可以被多个进程的IndexReader打开。一个进程中,推荐IndexReader被单例多线程使用。
IndexReader类不仅是线程安全的,还是线程友好的,即友好地支持并发访问,代码中同步代码(synchronized)块并不多。
2.单独写
对于一个索引来说,一次只能打开一个IndexWriter。
2.1 索引锁机制
Lucene采用了基于文件的锁。如果锁文件
write.lock存在于目录内,那么创建新的IndexWriter就会失败,抛出LockObtainFailedException异常。
lucene允许我们修改锁的实现,通过调用Directory,setLockFactory()传入自定义的子类。
3.边读边写
IndexReader可以在IndexWriter正在修改索引时被打开。每个IndexReader对象将向索引展示自己
被打开的时间点。该对象只有在Writer提交修改后才感知到索引变化。
打开IndexReader'时采用参数create=true,reader就会持续检查索引的情况。