https://cursos.alura.com.br/forum/topico-cap3-item-6-neste-contexto-pool-faz-sentido-181152
Sim, é possível fazer funcionar o código com a configuração dos dois pools de threads, desde que seja feita corretamente.
Você criou dois pools de threads, pool1 e pool2, usando o Executors.newCachedThreadPool(). O newCachedThreadPool() é um pool de threads com tamanho dinâmico, o que significa que cria novas threads conforme necessário e reutiliza threads inativas quando disponíveis. É importante notar que o pool de threads não tem uma quantidade fixa de threads, como no caso do newFixedThreadPool(), por exemplo.
Você criou duas tarefas TarefaClienteEnviar e TarefaClienteReceber, que implementam a interface Runnable.
Você executou a tarefa TarefaClienteEnviar no pool1 usando pool1.execute(tarefaClienteEnviar);.
Você também executou a tarefa TarefaClienteReceber no pool2 usando pool2.execute(tarefaClienteReceber);.
A abordagem está correta, e as tarefas deveriam ser executadas em seus respectivos pools. No entanto, o erro de 'socket closed' pode ocorrer por diferentes motivos.
Alguns pontos a serem observados:
Verifique se o objeto socket está sendo criado e passado corretamente para as tarefas TarefaClienteEnviar e TarefaClienteReceber. É possível que o erro esteja relacionado ao objeto socket estar fechado antes de ser usado nas tarefas.
Verifique se a classe TarefaClienteEnviar ou TarefaClienteReceber está fechando o socket em algum momento durante a execução. Isso poderia explicar por que o erro 'socket closed' está ocorrendo.
Certifique-se de que o código dentro das tarefas esteja lidando corretamente com o fluxo de dados e fechando o socket de maneira adequada quando não for mais necessário.