ATPS Programação Concorrente
Por: Hudson Henrique • 19/9/2015 • Trabalho acadêmico • 5.023 Palavras (21 Páginas) • 414 Visualizações
CENTRO UNIVERSITÁRIO ANHANGUERA DE CAMPO GRANDE[pic 2]
CIÊNCIA DA COMPUTAÇÃO
PROGRAMAÇÃO CONCORRENTE
CAMPO GRANDE MS/JUNHO DE 2015
GOMES SANTOS RA:373[pic 3][pic 4]
DA SILVA RA:379[pic 5]
PROGRAMAÇÃO CONCORRENTE
ATPS APRESENTADA COMO REQUISITO PARCIAL DE AVALIAÇÃO DA DISCIPLINA PROGRAMÃÇÃO CONCORRENTE MINISTRADA PELO PROF.º GIULLIANO ROSA.
CAMPO GRANDE MS/JUNHO DE 2015
SUMÁRIO[pic 6][pic 7]
1. CÓDIGO FONTE ETAPA 2 04
- CÓDIGO FONTE ETAPA 3 07
- CONSIDERAÇÕES FINAIS 11
- CÓDIGO FONTE ETAPA 2
Classe principal para execução do programa:
public class PonteTest {
public static void main(String[] args) {
Ponte ponte = new PonteSincronizada();
new Thread(new Produtor(ponte)).start();
new Thread(new Consumidor(ponte)).start();
}
}
Classe que será implementada com as informações que serão compartilhadas entre as threads produtoras e consumidoras:
public interface Ponte {
public void set(int valor) throws InterruptedException;
public int get() throws InterruptedException;
}
Classe do objeto compartilhado pelas threads consumidoras e produtoras:
public class PonteSincronizada implements Ponte {
private int valor = -1;
private boolean ocupada = false;//Indica se a ponte está ocupada ou não para a execução da próxima thread
@Override
public synchronized void set(int valor) throws InterruptedException {
while(ocupada)
{
wait();//Faz a thread aguardar a execução
}
System.out.print("Produtor Produziu: "+ valor + "\n");
this.valor = valor;
ocupada = true;
notifyAll(); //indica a todas as threads que estão aguardando a liberação ou a modificação do status da ponte para executar sua função
}
@Override
public synchronized int get() throws InterruptedException {
while(!ocupada)
{
wait();
}
System.err.println("Consumidor Consumiu: "+ valor + "\n");
ocupada = false;
notifyAll();
return valor;
}
}
Classe produtora:
public class Produtor implements Runnable {
private Ponte ponte;
int tempoTotalP = 0;
public Produtor(Ponte ponte)
{
this.ponte = ponte;
}
@Override
public void run() {
int total = 0;
...