Você está na página 1de 2

Sistemas Distribuídos e Paralelos

Guia para Aula Prática 1: Concorrência

Introdução
Seria interessante se pudéssemos concentrar nossa atenção na realização de
uma única tarefa de cada vez e fazer isso bem, o que geralmente é difícil de
alcançar em um mundo complexo em que muitas coisas acontecem ao mesmo
tempo. Nesta aula vamos aprender a desenvolver um programa que cria e
gerencia múltiplas tarefas utilizando a linguagem Java.

Problema

Consideremos o problema clássico do Produtor/Consumidor, onde um thread


está produzindo certos dados e outro o está consumindo.

Se o buffer estiver em um estado não cheio, o produtor pode produzir; se o buffer


estiver em um estado não vazio, o consumidor pode consumir. Todas as
operações que acessam o buffer devem usar a sincronização para garantir que
os dados sejam gravados no buffer ou lidos do buffer somente se ele estiver no
estado adequado.
Solução

1. Escreva um aplicativo concorrente com as seguintes especificações:


 Uma interface chamada Buffer com os métodos gravar (com
atributo do tipo inteiro) e ler. O método gravar é void e o ler retorna
um inteiro. Os métodos devem também lançar a exceção
InterruptedException.
 Duas classes Produtor e Consumidor. As classes devem
implementar a interface Runnable. Devem também possuir os
seguintes atributos e construtor:
 Objecto Buffer chamado dado
 Objecto Random chamado gerador
 Construtor com o parâmetro dado.
 Uma classe chamada BufferSincronizado que implementa a
interface Buffer. Atributos:
 Um do tipo boolean chamado ocupado, iniciado com false.
 Um objecto Buffer chamado dado, iniciado com -1.
 Uma classe, a classe principal, chamada de
bufferSincronizadoTeste que contém o método main.
 Um objecto Buffer
 Dois objecto Produtor e Consumidor
 Dois objectos Threads. Utilizar o método Thread start para
executar as Threads.

Observação: A interface Runnable (para criar tarefas concorrentes) declara um


único método run que contém o código que define a tarefa que um objecto
Runnable deve realizar.

2. Tarefa

 Executar os objectos Runnable com um Executor.

Você também pode gostar