INT-3433 commit

INT-3433: Fixed NIO deadlock (or timout if the CallerBlocksPolicy is used) with Bounded ThreadPoolTaskExecutor.

JIRA: https://jira.spring.io/browse/INT-3433

I have signed and agree to the terms of the SpringSource Individual
Contributor License Agreement.
I think you're right that we can just use two taskExecutor instead of CompositeExecutor. But I think it's wrong to use a distinct executor for each TcpNioConnection, because in case when you have many connections, you can easily exceed the maximum number of threads an OS can handle and get the "OutOfMemoryError: unable to create new native thread" error. For the same reason I wouldn't use even a shared Executors.newCachedThreadPool() when you're not sure that you'll have a relatively small load.