Wait e notify duvida [ RESOLVIDO]

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

Ressucitando o tópico, vamos incrementar um pouco a dúvida,

com threads em SE tudo ok, mas e quando estamos em um ambiente JEE ?

Estou com um Resource adapter e preciso trabalhar com esse paradigma, mas não manipulo threads diretamente, e sim Works, que são emitidos para um Workmanager, existe alguam restrição disto neste ambiente, utilizar o Wait e notify neste ambiente?