Servidor java Thread-safe

Ola pessoal, estou desenvolvendo um pequeno servidor e me aventurando no mundo dos sockets, com isso vem a preocupação com as threads.
Com um tempo cheguei ao código abaixo:

while(true){
            fluxo = new Fluxo(SocketServer.instancia().ouvir());
            Map<String, String> dados = fluxo.decompoePedido();
            
            Mensagem mensagem = new Mensagem(dados.get("texto"),dados.get("destinatario"));
           
            
            Envio envio = new Envio(dados.get("porta"));
            
                int tentativas = 0;
                while(tentativas < 5){
                    tentativas++;
                    
                    if(envio.enviarMensagem(mensagem)){
                        fluxo.saida.println("enviado");
                        break;
                    }else if(tentativas == 5){
                        fluxo.saida.println("falhou 5 vezes");
                    }

                }
        }

[list]O pequeno programa envia uma mensagem, e tentará envia-la 5 vezes caso enviarMensagem() retorne false.[/list]
[list]O metodo ouvir() em SocketServer retorna um socket.accept();[/list]
[list]Fluxo controla entrada e saida de dados atraves da conexao do socket[/list]
[list]A unica classe que é gerada uma nova thread é a Envia que implementa Runnable…[/list]

Alguma coisa me diz que estou fazendo isso errado… :? Será que este sistema de tentativas funcionará quando muitos clientes enviarem as mensagens ao mesmo tempo?
O que teria que mudar para cada envio ficar em sua thread e computar se foi ou nao enviado?

Algumas dicas de tutoriais neste assunto? Como voces, PROS, trabalham com este tipo de projeto?

Desde que cada conexão esteje sendo executado em um thread separada…esta tudo bem.

Seawulf_,

pelo que estou vendo se muitos clientes enviarem mensagem ao mesmo tempo você vai enfileirar os envios, ou seja, um envio só vai ocorrer após o outro, se vc quer uma coisa em paralelo seria interessante a lógica de envio ser iniciada na thread Envio (como vc disse que ela implementa Runnable).

Ai, se vc quiser que as mensagens dos clientes tenham ordem de envio, por exemplo, as mensagens recebidas devem ser envidas na mesma ordem de recebimento, seria interessante vc criar uma fila.

espero ter ajudado.