Thread - Monitores

Boa Tarde pessoal,

Estou vendo alguns conceitos de monitores, mas gostaria de ver um código que realmente funcionasse, pode ser bem simples, utilizando basicamente signal / wait / notify, e uma pequena explicação sobre o código.

AGRADEÇO A ATENÇÃO.

http://www.java2s.com/Code/Java/Threads/CatalogThreads.htm

VAlew Cara pela dica,

Outro detalhe,

Eu precisava de um biblioteca ou algo parecido em JAVA que solucionasse o seguinte problema.

Uma variavel que gerenciasse processos. Servisse como fila de processo.

Essa variavel no caso seria essa cond…

Algumas sugestão???

monitor Semaforo {
int s = 0; /* Valor do semaforo (s >= 0) /
cond pos; /
Sinaliza quando s > 0 */

      procedure Psem() {
          if (s == 0) wait(pos);
          s = s-1;
     }

}

VALEW

Veja outro exemplo em:

Existem várias classes que solucionam isso no Java:
a) LinkedBlockingQueue: Representa uma fila de processos sincronizada. Você nem precisa da variável, pois ela controla isso para você;
b) Você pode criar o mecanismo você mesmo com wait() e notify();
c) Você pode usar as classes do pacote java.util.concurrent, como Lock ou Semaphore.

O que você não pode é não entender o conceito. Ele é bastante complexo, mas threads não são um assunto tão inutilizado quanto parece.
Cedo ou tarde você terá que controlar mais de uma.

Como sugestão, leia esses dois tutoriais escritos pelo Brian Goetz:


http://www.ibm.com/developerworks/java/tutorials/j-concur/

Cada tutorial tem em torno de 10 páginas, e diversos exemplos.

Realmente cara é isso ai,

Achei nessa pagina tb,

http://download.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/locks/Condition.html

Obrigado pela ajuda !!

Mas assim, no meu caso, como eu faço o processo ser adicionado a fila:

class Casa{	
	final Lock lock = new ReentrantLock();
	final Condition notFull  = lock.newCondition();
	
	
	synchronized void entrarEMcasa(Animal animal) throws InterruptedException{
		if(animal.getLocal() != quintal)wait();
		
	}

Sendo Animal extendido de Thread, portanto são várias threads querendo acessar tal variavel compartilhada.

Como eu poderia implemetar?o que estou fazendo de errado?

Deveria colocar algum parametro no wait ou, ou ele deveria ser assim: animal.wait();

Esta fila de processos seria:
final Lock lock = new ReentrantLock();
ou
final Condition notFull = lock.newCondition();

??

Obrigado

A fila não é nenhum dos 2. A classe Lock é o equivalente do synchronized e a classe Condition é o equivalente do wait().
Por acaso você leu os dois tutoriais que te passei?

Cara, infelizmente eu não vi. Sei que é importante, mas não estou com tempo. Precisaria, agora, da resposta para o meu problema .

Sem comentários.