Ajuda para trabalho envolvendo Threads

Preciso desenvolver um trabalho usando Threads, relativo a produtor e consumidor.
Tem que utilizar um buffer, onde os produtores não podem inserir em um buffer cheio e os consumidores não podem buscar em um buffer vazio, os itens devem ser produzidos de forma aleatória, após a instrução deve ter o método sleep. A exclusão mútua deve ser garantida com métodos synchronized. A coordenação das threads (buffer cheio e vazio) deve ser feita com os métodos wait e notifyAll.
Depois ele quer q desenvolva o mesmo programa só q utilizando blocos synchronized.

Agradeço desde já a ajuda

http://download.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html

Exatamente que ajuda você precisa?