Voc� deve fazer este EP em Java, usando threads Java e os recursos b�sicos para sincroniza��o entre threads oferecidos pela linguagem (m�todos/blocos synchronized, opera��es wait(), notify() e notifyAll()). Se poss�vel evite o uso de notifyAll(), que facilita os algoritmos mas tende a penalizar o desempenho. Como a id�ia � trabalhar no n�vel das primitivas b�sicas para sincroniza��o entre threads Java, n�o devem ser usadas as classes de mais alto n�vel definidas nos pacotes java.util.concurrent, java.util.concurrent.atomic e java.util.concurrent.locks.
Note que a solu��o vista em classe para o caso de um barbeiro s� (se��o
5.2.5 do livro do Andrews) usou um monitor com tr�s vari�veis de
condi��o. No caso mais geral de barbeiros, voc� certamente precisar�
de mais de uma vari�vel de condi��o. O desafio aqui � implementar
em Java algo equivalente a um monitor com m�ltiplas vari�veis de
condi��o. Ler a se��o 3.7 (e, especificamente, a subse��o 3.7.3) do
livro do Doug Lea deve ajudar voc� nessa tarefa. Antes de fazer isso (e
antes de qualquer outra coisa), voc� precisa saber de uma pedra no seu
caminho: o problema do aninhamento de monitores Java (subse��o 3.3.4 do
livro do Doug Lea).