It's more likely to be a demonstration that concurrent programming is hard, results often hard to predict and debugging very hard.
Or perhaps you simply need to add acceptsDocsOutOfOrder() to your collector, returning false. Either way, hard to see any evidence of a thread-safety problem in lucene. If adding acceptsDocsOutOfOrder() doesn't fix it, I suggest you verify that your queue is getting the values you expect, in the order you expect, consistently. Then worry about the display part, first checking everything without any lucene calls. -- Ian. On Wed, Jul 9, 2014 at 5:59 AM, 김선무 <guks...@gmail.com> wrote: > Hi all, > > I know IndexSearcher is thread safe. > But IndexSearcher.doc is not thread safe maybe... > > I try to below > -------------------------------------------- > First, I extract docID at index directory. And that docID add on > queue(ConcurrentLinkedQueue) > > Second, extract field value using docID poll at this queue after extract > process end. This process is work to multi-threads. > > For this I used the following summation code below: > searcher.search( query, filter, new Collector() { public void collect( int > doc ) { queue.add( docBase + doc ) } ); > Thread thread1 = new Thread( () -> { while( !queue.isEmpty() ) { > System.out.println( searcher.doc(queue.poll()).get("content") ); } } ); > Thread thread2 = new Thread( thread1 ); > thread1.start(); > thread2.start(); > ------------------------------------------- > > Result was different in every execution. > > My method is wrong? or IndexSearcher bug? > > Please help me --------------------------------------------------------------------- To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org For additional commands, e-mail: java-user-h...@lucene.apache.org