Threads identificadas

1 resposta
R

Ola pessoal.

tenho um problema e, como sou iniciante em java, não consegui pensar um jeito para resolve-lo:

Preciso disparar 5 threads a partir de um servlet. Porém como qualquer outro acesso (por outro usuário, por exemplo) ao mesmo servlet causaria 5 outras requisições às mesmas 5 threads, eu gostaria de identificar a chamada, ou seja, receber (no servlet) apenas o resultado gerado pelas mesmas threads lançadas.

Alguém  passou por este problema? Existe algum padrão de projeto para isso?

Muito grato,

Rogério

1 Resposta

H

Eu começaria tentando algo como isto:

public class XServlet extends Servlet
{
  // um bit 1 para cada thread
  //
  int controle = 0x0000001f;

  public void doPost(...) ...
  {
    T1 t1 = new T1(this);
    T2 t2 = new T2(this);
    T3 t3 = new T3(this);
    T4 t4 = new T4(this);
    T5 t5 = new T5(this);
    //
    t1.start();
    t2.start();
    t3.start();
    t4.start();
    t5.start();
    //
    while(controle != 0)  Thread.yield();
    //
    // gera a página de retorno
    ...
  }
}

Cada thread ao terminar sua tarefa zeraria o respectivo bit. Exemplo:

class T1 extends Thread
{
  XServlet s;

  T1(XServlet s)
  {
     this.s = s;
  }

  public void run()
  {
    ...
    s.controle &= 0xfffffffe;
  }
}

Se o yield nu causar starvation, eu o substituiria por Thread.sleep(100) no loop.

Criado 15 de março de 2005
Ultima resposta 15 de mar. de 2005
Respostas 1
Participantes 2