2.3 - Classe Consumidor.java
package br.aiec.multithread.comum;
/**
* Essa classe lê os números de 1 a 10 (produzidos pelo produtor) que serão
* obtidos
* no acesso ao buffer que representa a variável de memória compartilhada.
*
* Observe que a variável local somatorio existe apenas para fins didáticos
* e como uma tentativa, amadora e inicial, de medir a integridade no acesso ao
* buffer.
* Devido a sua forma simples, e suficiente para nossos própositos, a mesma será
* utilizada.
*
* Uma medição adequada extrapola o conteúdo desta disciplina e, por ora, da forma
* em que se apresenta, a variável local somatorio será considerada suficiente para
* os propósitos de demonstração.
*
*
*
*
*/
public class Consumidor implements Runnable {
private IBuffer buffer;
public Consumidor(IBuffer buffer) {
this.buffer = buffer;
}
@Override
public void run() {
int somatorio = 0;
for(int i = 1; i < 11; i++){
somatorio += buffer.ler();
esperaCronometrada();
}
System.out.println("Somatorio de valores LIDOS: " + somatorio);
}
/**
* Esse método tem por finalidade potencializar a aleatoriedade do
* escalonamento. Ou seja,
* apenas tornar visivel à percepção humana o procedimento de alternancia de
* threads/processos
* (multiprogramação) em um computador.
*/
private void esperaCronometrada() {
long aleatorio = (long)Math.random() * 5;
try {
Thread.sleep(aleatorio);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}