From the doc:
When binding to an address and port
number, the application can also
specify an integer backlog parameter.
This represents the maximum number of
incoming TCP connections which the
system will queue internally.
Connections are queued while they are
waiting to be accepted by the
HttpServer. When the limit is reached,
further connections may be rejected
(or possibly ignored) by the
underlying TCP implementation. Setting
the right backlog value is a
compromise between efficient resource
usage in the TCP layer (not setting it
too high) and allowing adequate
throughput of incoming requests (not
setting it too low).
You may be seeing this.
Alternatively, have you set an executor using setExecutor(). The default executor may have fewer threads configured than you need, and a suitably-configured ThreadPoolExecutor may work.