english | блог | контакт
Thu, 23 Aug 2012 @ 14:43

Lucene 3.6, AttributeSource.getAttributeImplsIterator()

Теги: java lucene

Наступил случайно на то, что AttributeSource.getAttributeImplsIterator() не thread-safe. Суть можно выразить следующим образом:

thread1 {
  save1 = AttributeSource.getAttributeImplsIterator
  // что вызывает getCurrentState() и ждёт пока итератор не будет подготовлен
}
thread2 {
  save2 = AttributeSource.getAttributeImplsIterator
  // getCurrentState() возвращает ссылку currentState[0],
  // в которой может содержаться не до конца сформированный список для итератора,
  // где некоторые State могут даже содержать attribute == null
}