 <p>Maybe you should take a look at <a href="http://download.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/CompletionService.html" rel="nofollow">CompletionService</a></p> <p>It is designed to combine executor and a queue functionality in one. Tasks which completed execution will be available from the completions service via </p> <pre><code>completionServiceInstance.take() </code></pre> <p>You can then again use another executor for 3. i.e. fill DB with the results, which you will feed with the results taken from the completionServiceInstance.</p>