ATPS apresentado ao Curso de Ciência da Computação da Instituição Anhanguera.
Por: Erick Gimenes • 4/5/2017 • Projeto de pesquisa • 1.864 Palavras (8 Páginas) • 396 Visualizações
[pic 1][pic 2]
[pic 3]
[pic 4]
[pic 5]
Campinas
2017
ERICK KALL GIMENES
LUCAS PERES BARBI
TARSIS CESARIM MENDONÇA
[pic 6]
ATPS apresentado ao Curso de Ciência da Computação da Instituição Anhanguera.
Orientador: Mauricio de Morais.
CAMPINAS
2017
SUMÁRIO
E TAPA № 1
Aula – Tema: Revisão sobre Sistemas Operacionais. Conceitos de Programação Concorrente, Multiprogramação, Threads, Concorrência e Problemas de Programação Concorrente.
Esta atividade é importante para que você utilize os conceitos iniciais vistos em sala de aula para definir qual a melhor linguagem de programação a utilizar e criar os primeiros componentes do protótipo. Serão utilizados conceitos de multiprogramação, Threads e Programação concorrente.
Para realizá-la, é importante seguir os passos descritos.
Quantidade de Threads e seu tempo de execução.
Códigos Fonte
Classe Principal.java
import java.util.ArrayList;
import java.util.List;
public class Principal extends Thread {
// CRIAÇÃO DO BUFFER
static List
public static void main(String[] args) throws InterruptedException {
System.out.println("Buffer criado. Iniciando preenchimento do buffer");
// PREENCHENDO BUFFER
for (int i = 0; i < 5000; i++) {
buffer.add(new Pedido(i, "código " + i));
}
System.out.println("Buffer PREENCHIDO");
// PEGA INICIO DO TEMPO
long inicio = System.nanoTime() / 1000000;
// QUANTIDA DE THREADS A SEREM CRIADAS
Principal[] consumidor = new Principal[50];
// CRIAÇÃO DAS THREADS
for (int i = 0; i < consumidor.length; i++) {
consumidor[i] = new Principal();
consumidor[i].setName("Thread: " + i);
consumidor[i].start();
}
for (int i = 0; i < consumidor.length; i++) {
consumidor[i].join();
}
// PEGA FINAL DO TEMPO DE EXECUÇÃO E IMPRIME TEMPO TOTAL DE PROCESSAMENTO
long fim = System.nanoTime() / 1000000;
System.out.println("Tempo Total Processado: " + (fim - inicio) + " ms");
}
Override
public void run() {
while (!buffer.isEmpty()) {
Pedido pedido = (Pedido) buffer.get(0);
buffer.remove(pedido);
try {
sleep(10000);
System.out.println(Thread.currentThread().getName() + " - pedido nº " + pedido.getCodigo() + " consumido");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Classe Pedido.java
public class Pedido {
private int codigo;
private String descricao;
Pedido(int codigo, String descricao) {
this.setCodigo(codigo);
this.setDescricao(descricao);
}
public int getCodigo() {
return codigo;
}
public void setCodigo(int codigo) {
this.codigo = codigo;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
}
Para exemplificar o log de saída do programa, segue uma amostra da execução do programa com menor quantidade de threads e menor tamanho do buffer.
Buffer criado. Iniciando preenchimento do buffer
Buffer PREENCHIDO
Thread: 1 - pedido nº 1 consumido
Thread: 0 - pedido nº 0 consumido
Thread: 2 - pedido nº 2 consumido
Thread: 3 - pedido nº 3 consumido
Thread: 4 - pedido nº 4 consumido
Thread: 5 - pedido nº 8 consumido
Thread: 9 - pedido nº 8 consumido
Thread: 7 - pedido nº 7 consumido
Thread: 8 - pedido nº 6 consumido
Thread: 6 - pedido nº 5 consumido
Thread: 1 - pedido nº 10 consumido
Thread: 2 - pedido nº 12 consumido
Thread: 0 - pedido nº 11 consumido
Thread: 3 - pedido nº 13 consumido
Thread: 5 - pedido nº 15 consumido
Thread: 9 - pedido nº 16 consumido
Thread: 7 - pedido nº 17 consumido
Thread: 4 - pedido nº 14 consumido
Thread: 6 - pedido nº 19 consumido
Thread: 8 - pedido nº 18 consumido
Tempo Total Processado: 20003 ms
Experimento iniciando 1 threads
public class Canal extends Thread { private String mensagem;
private int atraso;
public Canal(String mensagem, int atraso) { this.mensagem = mensagem;
this.atraso = atraso;
}
public void run() {
for (int i = 0; i < 10; i++) { try {
}
catch(Exception e) {
}
System.out.println(mensagem + ", contando: " + i);
}
}
}
public class MultiplosCanais {
public static void main(String[] args) { Canal c1 = new Canal("Canal 1", 1000); c1.start();
...