Problema com Bloqueio de Thread

Pessoal, estou tendo um problema meio complicado , não sei se tem como solucionar isso, mas vou tentar descrever:

Eu tenho uma classe que implementa a interface Runnable, tem um determinado momento que é criada mais de uma instância dessa classe e eu quero bloquear as outras instância caso a primeira ainda esteja em uso .Aí vai uma parte do código pra que seja melhor entendido:

      synchronized(this)
      { 
       if( cont == 0 || nomeGarçom.equals(endpt.remoteName) )
       { 
        .
        .
        .
        .
        .
       else
       {
        try
        { 
            this.wait();
        }
        catch(InterruptedException e)
        {} 
       } 
      }
    }else if ( signal == NetLayer.SIGNAL_TERMINATE_SEND_PEDIDO ) 
    {
      synchronized(this)
      { 
       this.notifyAll();
      } 

Vou explicar de novo ,um pouco mais detalhado :

Quando acontece a primeira instância dessa classe(um dispositivo cliente que mandou uma mensagem pra esse dispositivo (servidor)) ele entra dentro do bloco do “if( cont == 0 || nomeGarçom.equals …” .Então só esse dispositivo cliente passa a ter acesso ao servidor.
Quando um outro dispositivo cliente quer ter acesso a esse servidor , ele não conseque, então ele cai no bloco do " this.wait();" e fica na espera .
O problema está aí: quando o primeiro dispositivo cliente acaba seu trabalho e chama o “this.notifyAll();” ele não desbloqueia ninguém, porque o segundo dispositivo está numa outra instância da classe Reader (a classe Reader é criada pra cada dispositivo cliente,pois não tem como atender a mais de um cliente somente com uma instância de Reader. Tem que ser uma instância de Reader pra cada cliente), então o segundo dispositivo vai adormecer pra sempre, pois não tem ninguém que o acorde … O problema é esse …

Então eu pensei numa solução, mas não sei se isso é possível:

Tem como eu ter um controle de todas as instâncias dessa minha classe Reader?
Porque se eu tiver um controle de todas as instâncias , eu posso chamar o método .notifyAll(); na instância que chamou o método .wait(), tem como eu ter esse controle?

Por favor, se puderem me ajudar, porque já estava tendo problema com isso, mas o mais importante eu já descobri: o problema, pois nem o problema eu sabia qual era, agora, estou em um outro assunto: a solução pra isso. Por favor, se puderem me ajudar …

Grato,

Raphael.

OPa,
Guri, não vou entrar muito no problema, mas vc poderia armazenar cada instancia num ArrayList não?!!?! :wink:

Aí vc acessava por ordem de entrada!!!

Soluciona?

É uma boa idéia msm. Só que, vc sabe se quando um objeto DataOutPutStream manda muita informação (muitos write()) e só depois de um tempo o objeto DataInPutStream começa a ler. Vc sabe se ele vai ler tudo sem problema?

Opa,
Isso vai depender do timeout que vc setar na conexao (Socket/ou a conexão que vc ta usando).

Falow!

Pior que não deu … Quando demora muito o DataInputStream já lê tipo uns lixos, aqueles quadradinhos …

A conexão é bluetooth , eu não sei sobre o timeout em conexões bluetooth, existe?