Dúvida sobre Objetos ou Threads

Olá a todos, sou novo no forum e estou com uma dúvida.

Estou procurando a 2 dias o que o seguinte bloco de códigos faz.
Achei esse código na internet. É um ChatServer em java bem simples sem interface gráfica.
Eu entendo o básico de Threads e de objetos mas não entendi o significado do seguinte código:

[code]@Override
public void run() {
String line;
synchronized (handlers) {
handlers.addElement(this);
// add() not found in Vector class
}
try {
while (!(line = in.readLine()).equalsIgnoreCase("/quit")) {
for (int i = 0; i < handlers.size(); i++) {

                synchronized (handlers) {
                    ChatHandler handler =
                            (ChatHandler) handlers.elementAt(i);
                    handler.out.println(line + "\r");
                    handler.out.flush();
                }
            }
        }
    }[/code]

A parte do

synchronized (handlers) { ChatHandler handler = (ChatHandler) handlers.elementAt(i); handler.out.println(line + "\r"); handler.out.flush();

Ele cria um objeto handler para cada Thread?? E o que significa handler.out.flush(); ???
Desde já muito obrigado.

Seguinte: Esse algoritmo refere-se ao design patter chamado Observer.

Basicamente o que acontece ai eh que toda vez que os “assinantes” envia uma mensagem, um brodcast eh realizado para os mesmos atraves do servico que pode ser encarado como um “provedor” dos assinantes. Uma analogia para ficar mais claro seria por exemplo a uma assinatura de uma revista. Nos por exemplo, seriamos os assinantes, pois solicitamos ao servico/provedor o envio das revistas. QUando uma edicao eh lancada, todos os assinantes recebem as mesmas copias. Se futuramente nao quisermos mais receber as copias, nos solicitamos o cancelamento da assinatura, exatamente igual ao que acontece neste pattern.

Agora respondendo mais precisamente sua pergunta, nao eh criada um handler para cada thread. Alias, os handlers sao apenas recuperado dentro da thread para que possam ser notificados de uma mensagem. A palavra chave synchronized foi utilizado para garantir que o acesso eh thread safe, ou seja, para que o bloco nao seja concorrido por mais de uma requisicao ao mesmo tempo.

Espero ter tirado sua duvida,
Abracos

Huummm agora deu pra entender mais um pouco.
Vou dar uma lida sobre design patter. Já tinha ouvido falar mas nunca parei pra pensar o que seria.

Muito obrigado alexmdo