Os referidos códigos apresentados neste item, utilizados em conjunto com os do item anterior, demonstram o acesso de duas threads (produtor e consumidor) ao buffer de memória que, neste exemplo, não oferece qualquer controle de sincronização no seu acesso. Deste modo, o objetivo é demonstrar o problema da falta de integridade no acesso ao buffer.
Oportunamente serão demonstradas duas possíveis soluções para o referido problema.
3.1- Classe BufferNaoSincronizado.java
package br.aiec.multithread.monitor;
import br.aiec.multithread.comum.IBuffer;
/**
* Essa classe representa um esboço inicial de um monitor, e, portanto,
*
* ELA AINDA NÃO É SEGURA PARA MULTITHREAD!
*
* Essa classe não oferece qualquer mecanismo de sincronização para acesso concorrente/paralelo
* ao buffer, o que consequentemente, irá gerar problemas de falta de integridade no buffer.
*
* As próximas versões já serão seguras e serão baseadas nessa estrutura inicial.
*
*
*
*/
public class BufferNaoSincronizado implements IBuffer {
private int buffer;
@Override
public void gravar(int value) {
System.out.println("GRAVANDO: " + value);
this.buffer = value;
}
@Override
public int ler() {
int value = this.buffer;
System.out.println("LENDO: " + value);
return value;
}
}