If you are going to multi-thread queries, also check that query processing actually does occur in parallel. This would not only mean that the queries are being effectively handled as separate streams, but also that the queries themselves are capable of executing without contention with one another .. transaction isolation and so-forth. And that it is actually faster, given what you are actually trying to do and actual conditions.
Lately, I have switched more-and-more to simple programs that can be run independently of one another, i.e. as entirely separate processes, launched for example through a batch or workload-processing system. With this approach, there is of course no concurrency-issue within the application that must be considered, and the workload manager can tune the situation very directly: just launch as many copies as you need. Naturally you have to have a reliable and not-too contentious way to parcel up the work.