Using a fixed thread pool.  This design won't work without tweaks.  When we try to validate more transactions than there are threads in the pool it will hang.  The easiest fix is to change to a cached thread pool.
Using cached thread pool