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.