ATPS programacao concorrente
Por: murilomark • 8/6/2015 • Trabalho acadêmico • 1.924 Palavras (8 Páginas) • 454 Visualizações
Sumário
INTRODUÇÃO 3
1. Etapa 1 4
2. Etapa 2 7
CONCLUSÃO 11
INTRODUÇÃO
Esta atividade é importante para que você aprimore seus conhecimentos sobre como implementar a programação concorrente, os principais problemas e para que se entenda e saiba como resolve-los ao se trabalhar com recursos compartilhados.
Etapa 1
Etapa1.java
package etapa1; public class Etapa1 { public static void main(String[] args) { Buffer buffer = new Buffer(); Consumidor[] consumidor = new Consumidor[50];
for(int i=0;i { consumidor[i] = new Consumidor(i); consumidor[i].buffer = buffer; consumidor[i].start(); } } } |
Consumidor.java
package etapa1; public class Consumidor extends Thread {
Buffer buffer; //private int ConsumidorId; public Consumidor(int numero) { super("Consumidor "+numero); }
@Override public void run(){
while(buffer.getValor()>0){ // ConsumidorId = buffer.getValor(); System.out.println(Thread.currentThread().getName() + " Valor utilizado " + buffer.getValor());
buffer.decrementaValor(); try { Thread.sleep(10000); } catch (InterruptedException ex) { System.err.println("Erro : "+ex); } } }
} |
Buffer.java
package etapa1; public class Buffer {
private int valor; public Buffer() { this.valor = 500; } public int getValor() { return valor; } public void setValor(int novoValor) { this.valor = novoValor; }
public void incrementaValor(){ this.valor++; }
public void decrementaValor(){ this.valor--; }
} |
Tabela do experimento(utilizado 3000ms de delay)
Thread | 1ª execução | 2ª execução | 3ª execução | 4ª execução | 5ª execução | 6ª execução | 7ª execução | 8ª execução | 9ª execução | 10ª execução |
1 | 4s | 3s | 3s | 3s | 3s | 3s | 3s | 3s | 3s | 3s |
10 | 3s | 3s | 3s | 3s | 3s | 3s | 3s | 3s | 3s | 3s |
50 | 3s | 3s | 3s | 3s | 3s | 3s | 3s | 3s | 3s | 3s |
100 | 6s | 6s | 6s | 6s | 6s | 6s | 6s | 6s | 6s | 6s |
500 | 30s | 30s | 30s | 30s | 30s | 30s | 30s | 30s | 30s | 30s |
1000 | 60s | 60s | 60s | 60s | 60s | 60s | 60s | 60s | 60s | 60s |
Tabela de comparativo
Thread | Tempo médio |
1 | 3,1s |
10 | 3s |
50 | 3s |
100 | 6s |
500 | 30s |
1000 | 60s |
[pic 1]
Etapa 2
Etapa2.java
package etapa2; public class Etapa2 { public static void main(String[] args) { //IBuffer localCompartilhado = new UnsynchronizedBuffer(); SynchronizedBuffer localCompartilhado = new SynchronizedBuffer();
StringBuffer cabecalho = new StringBuffer("Operação"); cabecalho.setLength(40); cabecalho.append("Buffer\t\tContagem de ocupados"); System.out.println(cabecalho); localCompartilhado.displayState("Estado Inicial");
Produtor p = new Produtor(localCompartilhado); Consumidor c = new Consumidor(localCompartilhado);
p.start(); c.start();
} } |
...