Atps - Programação Concorrente
Por: caiosrezende • 8/5/2015 • Trabalho acadêmico • 3.897 Palavras (16 Páginas) • 488 Visualizações
package atpspc;
public class ProdutorConsumidor {
private int fila=0; //front=0; | O Chefe de FILA
private int next=0; //A Equipa Tail
private int tamanhoBuffer; //bufferLength | Tamanho do Buffer
private String buffer[]; //Buffer
private int bufferVazio; //emptyNum | O número de buffer vazio
public ProdutorConsumidor(int tamanhoBuffer){
this.tamanhoBuffer = tamanhoBuffer;
buffer = new String[tamanhoBuffer];
bufferVazio = tamanhoBuffer;
}
//A produção
synchronized public void produzir(String data){
System.out.println("A quantidade de Produção, buffer vazio" + bufferVazio);
System.out.println("Os produtores estão Em Produção" + data);
while (full()){
System.out.println("O Buffer esta cheio, esperar");
try{
this.wait();
}catch (InterruptedException e) {
e.printStackTrace();
}
}//Fim While
this.notifyAll();
buffer[next]=data;
next = (next+1) %tamanhoBuffer;
System.out.println("Produção realizada com Sucesso: "+ data);
bufferVazio--;
System.out.println("Após a produção, O número de buffer vazio" + bufferVazio);
}//Fim da Produção
//O Consumo
public synchronized void consum(){
System.out.println("Quantidade de Buffer vazio: " + bufferVazio);
while (empty()){
System.out.println("A espera para consumir");
try{
this.wait();
}catch (InterruptedException e){
e.printStackTrace();
}
}//Fim While
System.out.println("O consumidor esta:"+ buffer[fila]);
this.notifyAll();
System.out.println("Sucesso ao consumir: "+ buffer[fila]);
fila = (fila+1) %bufferVazio;
bufferVazio++;
System.out.println("Após consumo, a quantidade de Buffer vazio é: " + bufferVazio);
}// Fim do Consumo
synchronized public void imprime(){
...