Threads como Consumidora e Produtora em simultaneo

4 respostas
X

Estou fazendo um trabalho para a Escola, e tenho um problema que não estou a conseguir resolver, preciso de ideias, então é assim :

  • Tenho um buffer de 5 posições (pode ser um array ou não).

  • Este buffer é consumidor de uma LikedList1, desde que esta tenha elementos, mas também é produtor para uma outra (diferente portanto) LikedList2, desde que esta não esteja cheia.

  • Em paralelo todos os objectos que saem de LinkedList1 tem um tempo de passagem aleatório (random) por o buffer independentemente da posição do buffer em que se encontram, o que me leva a dizer que as posições do buffer livres/ocupadas também são aleatorias (random) e que a saida para LinkedList2 também será aleatória.

Eu estou a ver isto como 5 Threads do mesmo tipo a correm em simultaneo, já fiz algumas tentativas mas sem sucesso ! Estou a entrar no desespero, se não resolver isto hoje tou frito !

4 Respostas

Daniel_Quirino_Olive

Comece olhando pela classe java.util.concurrent.Exchanger. Depois olhe como funciona o mecanismo de locking que este pacote oferece.

X

Acho que complicou, porque acho que não resolve o problema do paralelismo entre os Index do Array.

Se eu lançar 5 threads posso vê-las, cada uma como o Index do buffer pretendido, em cada cada uma delas criaria um objecto do tipo IndexBuffer,

por exemplo :

IndexBuffer buffer1 = new IndexBuffer()

IndexBuffer buffer2 = new IndexBuffer()

----------------------------------------------- etc

Dentro do metodo Run() de cada uma delas seria feito o remove para LinkedList1 e o insert em LinkedList2, colocando as devidas validações e random sleep pelo meio !

Esta eu acho que será a forma de pensar, só não consigo por a ideia a funcionar, alguém pode dar uma ideia de como ???

ViniGodoy

Acho que se a idéia é resolver um exercício da escola, então não é bom usar classes prontas mesmo.

Fiz esse exemplo que deve ser muito próximo do que você precisa.

Dá uma lida e vê se entende.

X

Valeu, está a ajudar !

Criado 20 de janeiro de 2007
Ultima resposta 20 de jan. de 2007
Respostas 4
Participantes 3