Problemas com thread, telnet e socket

Olá Pessoal, estou com um problema no meu sistema e gostaria muito que se alguém soubesse uma solução me ajudasse. O problema é o seguinte estou desenvolvendo um sistema Applet que pega informaçoes da telnet e joga no sistema. Para isso usei uma classe no sistema q faz a conexao com o banco de dados (postgre) e fiz uma nova classe q extend umaThread que faz a conexao com a telnet.
Agora devido o grande volume de informações q pego da telnet meu sistema está ficando mutio lendo. Gostaria de saber se tem como fazer uma nova classe que pegue o resultado da telnet para eu poder dividir o fluxo de informação, se tiver como fazer isso deixo um pouco de informação na classe que faz a conexao com a telnet e o resto das informações em outra thread. Mas nao sei como vou fazer uma nova thread sem precisar fazer uma nova conxao com a Telnet. Se alguém souber por favor me de um help!!! Vlw!!!

  1. Crie uma pilha, para armazenar os eventos que chegam do Telnet.
  2. Faça sua classe do telnet empilhar esses eventos nessa pilha;
  3. Use outra thread para desempilhar esses eventos e disparar para o seu sistema.

Isso desafoga a classe do Telnet, que pode enviar a mensagem instantaneamente para cima, seja qual for o volume.
Para mim, evitou muitas dores de cabeça. O Java já tem uma classe pronta, thread-safe, que implementa essa pilha (não a thread de envio, só a pilha mesmo).
O nome dela é BlockingQueue. Só tome cuidado que existe um memory leak na blocking queue que só foi corrigido na versão 5 update 12 ou na 6 update 3.

Para criar uma BlockingQueue é só fazer:

private volatile BlockingQueue<MessageEvent> eventQueue =
new LinkedBlockingQueue<MessageEvent>();

O código da rua da thread de entrega dos eventos (message dispatching) geralmente é algo simples como:

[code]// Isso é chamado pela thread do telnet, para adicionar uma mensagem a pilha
public void add(MessageEvent event) {
eventQueue.offer(event);
}

//Esse é o Runnable, que roda numa outra threda.
//Ele só desempilha uma mensagem e joga para frente.
//O try…catch serve de proteção.
//Se o cliente que receber a mensagem gerar uma exceção, ela é logada e a thread de dispatching não morre.

private class DispatcherRun implements Runnable {
public void run() {
try {
while (shouldExist) {
MessageEvent msgEvent = null;
while (msgEvent == null && shouldExist)
msgEvent = eventQueue.poll(50, TimeUnit.MILLISECONDS);

        if (msgEvent != null) {
           try {
               fireMessageArrived(msgEvent);
           } catch (Exception e) {
               //Logar. O cliente lançou uma exceção não capturada, que acabou caindo aqui na thread de dispatch.
           }
     }
  }
  catch (InterruptedException e) {
      //Finalizamos o dispatch
  }

}
}[/code]

Obrigada ViniGodoy , fiz como vc disse e funcionou!!!Vlw!!!