ATPS programacao concorrente
Por: murilomark • 8/6/2015 • Trabalho acadêmico • 1.924 Palavras (8 Páginas) • 541 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(); 
 } } | 
...
