Talvez o comando fim nunca tenha sido implementado corretamente. Devido a presença de outros bugs. Porém descrevo o seguinte, no projeto final num simples cenário com o servidor rodando com um cliente, mesmo após o cliente dar o comando "fim" e terminar o servidor fica com a thread main rodando e não termina.
Ainda nesse cenário , ao comentar a chamada da função iniciarConsumidores() no construtor do Servidor o comando "fim" já consegue terminar a thread main do servidor . Então presumo que as threads consumidoras criadas ficam penduradas,ativas,referenciadas no pool.Ou qualquer outro termo correto/ mais adequado.
O creio que o comando "fim" implementado corretamente só deveria encerrar um servidor quando todos os clientes pedissem para o servidor terminar. Contudo não funciona corretamente nem com apenas um cliente, devido as threads consumidoras penduradas.
Alguma dica de como lidar melhor com essas threads consumidoras com o pool?
private void iniciarConsumidores() {
int qtdCondumidores = 2;
for (int i = 0; i < qtdCondumidores; i++) {
TarefaConsumir tarefa = new TarefaConsumir(filaComandos);
this.threadPool.execute(tarefa);
}
}