lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Miles Barr <>
Subject Re: QueryParser not thread-safe
Date Wed, 24 Aug 2005 16:10:12 GMT
On Wed, 2005-08-24 at 12:10 -0300, wrote:
> Now, while I agree that simple is better, I think QueryParser should 
> be made thread-safe through the use of a wrapper class (along the 
> line of what Luc suggested) or by using something other than javacc, 
> so this is no longer an issue in future lucene versions.
> I caught the error through a load test on a system with low memory 
> and slow processor, which exacerbates the concurrency issues. 
> It was a hard to catch bug: even when it showed up the query results 
> still kinda made sense, because missing or duplicate search terms 
> don't produce complete garbage.
> I'm a beginner, so I may be missing something big, but if not, many 
> lucene installations out there may be having this problem without 
> knowing it.

I think a mention in the Javadoc that QueryParser isn't thread-safe
should be enough. Not everything needs to be thread-safe.

Are your tests showing the creation of QueryParser objects taking a
significant amount of time and/or memory? Just having one QueryParser
per thread should be fine, or just create a new one per query.

Given that QueryParser is generated by JavaCC, short of changing JavaCC
so all its fields are wrapped in ThreadLocals, you'd need to wrap all
the methods with synchronized. You could create something like
java.util.Collections's synchronizedXXX methods.

But my gut feeling is having all parsing go through one synchronized
class in a multi-threaded environment will be slower than calling
QueryParser's static parse method for each request. 

IMHO it's better to spot when you need to be careful with threads and
handle it appropriately rather trying to make every class you write
thread-safe. Check out this article for more:

Miles Barr <>
Runtime Collective Ltd.

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message