Another option is to move the lock check code to wrap the new Runnable creation and pool.execute call.  That will prevent a new thread from being created momentarily.