The purpose is to have limited available connections at a time
Are you sure it's limited number of "connections" you are looking into or is it limited number of serviceable connections? Because the way you have presented your sample snippet, you would anyways be consuming a "socket" on the server side, with the difference being the total number of client requests concurrently being handled/processed.
Anyways, I think the confusion here stems from the fact that you are creating a special kind of thread (MyServerThread) rather than creating a runnable which in turn can be processed by threads i.e. separate the notion of a single request handling task from the notion of how it is serviced (i.e. one thread per request, one thread for all requests, a pool of threads for all requests etc.)
Also, is creating your own thread pool and absolute requirement here since that might involve a lot of thorough testing on your part and still might not turn out to be perfect. If no, then you can use the concept of Executor service which was introduced in Java 5, specifically the fixed thread pool executor.
The Javadocs of the ExecutorService interface has an example which perfectly fits your use-case.