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.