nesse caso, não faz sentido. correto, pois não há reaproveitamento, mas no comentário, é citado que não invalidaria a solução, então, para aprendizado criei um ExecutorService e chamei execute passando primeiro um Runnable:
```
ExecutorService pool1 = Executors.newCachedThreadPool();
ExecutorService pool2 = Executors.newCachedThreadPool();
Runnable tarefaClienteEnviar = new TarefaClienteEnviar(socket);
//Thread threadEnviaComando = new Thread(tarefaClienteEnviar);
Runnable tarefaClienteReceber = new TarefaClienteReceber(socket);
//Thread threadReceberComando = new Thread(tarefaClienteReceber);
pool1.execute(tarefaClienteEnviar);
//pool1.execute(tarefaClienteReceber);
pool2.execute(tarefaClienteReceber);
//threadReceberComando.start();
//threadEnviaComando.start();
```
e todas as tentativas resultaram em erro de 'socket closed'. obs: os comentários no codigo indicam as combinações. é possível DIDATICAMENTE fazer funcionar? como? Obrigado.