Solução do problema dos Produtores e Consumidores usando monitor em Java
- Sistema Operacional Windows 10
- Eclipse IDE Oxygen Release (4.7.0)
- Eclipse IDE Neon.1a Release (4.6.1)
Abra o Eclipse e adicione o projeto.
- New
- Java Project
- Desmaque o checkbox
Use default location
- Browse
- Selecione a pasta do projeto
- Finish
Abra o arquivo Main.java
.
Dentro do arquivo poderão ser feitas algumas mudanças de configuração nos Producers
e nos Consumers
. O construtor de cada um deles é composto pelo buffer
e a printer
compartilhados além de outros dados, como mostrador abaixo:
/*
* Parâmetros do construtor do Producer:
* (printer, buffer, numero_identificador, numero_de_producoes, possui_tempo_de_espera_para_produzir)
*/
Producer p1 = new Producer(p, b, 1, 8, true);
/*
* Parâmetros do construtor do Consumer:
* (printer, buffer, numero_identificador, numero_de_consumos, possui_tempo_de_espera_para_consumir)
*/
Consumer c1 = new Consumer(p, b, 1, 20, false);
O
possui_tempo_de_espera_para_consumir
é um boolean que diz se você quer que umProducer
espere um tempo randômico para então tentar colocar outra produção nobuffer
.
Buffer b = new Buffer();
Printer p = new Printer();
Producer p1 = new Producer(p, b, 1, 8, true);
Producer p2 = new Producer(p, b, 2, 12, true);
Consumer c1 = new Consumer(p, b, 1, 20, false);
p1.start();
p2.start();
c1.start();
Não altere o
buffer
eprinter
compartilhados. Precisam ser iguais para que osProducers
eConsumers
interajam entre si.
O buffer
possui a finalidade de solucionar o problema de exclusão mútua para a produção e consumo dos conteúdos gerados.
A printer
possui a finalidade de sincronizar as mensagens mostradas ao usuário. Somente as de valor relevante e não as de informação (INFO>
).
Producer p1 = new Producer(p, b, 1, 2, true);
Producer p2 = new Producer(p, b, 2, 3, true);
Consumer c1 = new Consumer(p, b, 1, 5, false);
Producer #2 put: 1. Wait time to put: 0.
Consumer #1 got: 1 from Producer #2. Wait time to get: 0
Consumer #1 got: 1 from Producer #1. Wait time to get: 0
Producer #1 put: 1. Wait time to put: 1.
INFO> Producer #2 produce again in 35 miliseconds
INFO> Producer #1 produce again in 38 miliseconds
Producer #2 put: 2. Wait time to put: 0.
Consumer #1 got: 2 from Producer #2. Wait time to get: 37
INFO> Producer #2 produce again in 20 miliseconds
Producer #1 put: 2. Wait time to put: 0.
INFO> Producer #1 produce again in 63 miliseconds
Consumer #1 got: 2 from Producer #1. Wait time to get: 3
Producer #2 put: 3. Wait time to put: 0.
Consumer #1 got: 3 from Producer #2. Wait time to get: 17
INFO> Producer #2 produce again in 52 miliseconds