Desculpa acordar aqui, mas a linguagem usada nas respostas desse topico nao me ajudaram muito.
Tenho um problema:
dentro de um método run() tem um super.run() que chama 4 robôs para colocarem suas peças simultaneamente, depois de colocar, eles vao ter q revesar 1 ferramenta para parafusar sua peça. o método que ele chamou com super.run() faz com que os robos comecem a colocar a peça, depois q um terminou, ele ja começa a entrar na fila para pegar a ferramenta.
public void run(){
super.run();
ferramenta.adquirir();
try {
Thread.sleep(TempoParaParafusar);
} catch (InterruptedException ex) {})
ferramenta.release();
}
public synchronized void adquirir() {
while (counter == 0) {
try {
wait();
} catch (InterruptedException ex) {
}
}
System.out.println("Adquirida ferramenta");
counter--;
}
public synchronized void release() {
System.out.println("Release ferramenta");
counter++;
notify();
}
Entendi que um robo vai colocar sua peça e esperar a ferramenta, também entendi esse processo que apenas 1 robo pode executar por vez úm método synchronized e, por isso, apenas 1 poderá estar com a ferramenta ao mesmo tempo. Pois enquanto um está parafusando, o proximo da fila está preso no wait.
Se eu retirar synchronized, ocorre o erro que já foi comentado mas ainda nao entendi porque.
Obrigado