I have a web application where users submit queries to a Lucene index.  The queries 
are parsed by a Lucene
QueryParser.  I learned the hard way that QueryParser is not thread-safe.
Is it better to use a single QueryParser instance, and synchronize on calls to its parse() method?  Or is it better to construct a new instance for each query?  (Or would I be better served by a pool of QueryParsers?)
I know that in general questions like this depend on the particulars and require profiling, but maybe someone out there can say definitively "QueryParsers are extremely inexpensive/expensive to construct"?
Create a new one each time. These are lightweight objects and the JVM handles object creation and garbage collection very well. Definitely do not use an object pool.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With