2.2 - Classe Produtor.java
package br.aiec.multithread.comum;
import java.util.Random;
/**
* Essa classe produz números de 1 a 10 que serão gravados no buffer
* que representa a variável de memória compartilhada.
*
* Observe que a variável local somatório 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 propósitos, 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 somatório será considerada suficiente para
* os propósitos de demonstração.
*
*
*
*
*/
public class Produtor implements Runnable {
private IBuffer buffer;
public Produtor(IBuffer buffer) {
this.buffer = buffer;
}
@Override
public void run() {
int somatorio = 0;
for(int i = 1; i < 11; i++){
somatorio += i;
buffer.gravar(i);
esperaCronometrada();
}
System.out.println("Somatorio de valores GRAVADOS: " + somatorio);
}
/**
* Esse método tem por finalidade potencializar a aleatoriedade do
* escalonamento. Ou seja,
* apenas tornar visível à percepção humana o procedimento de alternância 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();
}
}
}