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();
        }       
    }
}

                
            
Copyright © 2016 AIEC.