Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
2f3287a6-9678-4a38-8364-49a9c7e1f0e5 ThreadProdutorConsumidor/bin/com/ayrongabriel/threads/InterfaceBuffer.class ThreadProdutorConsumidor/bin/com/ayrongabriel/threads/Consumidor.class ThreadProdutorConsumidor/bin/com/ayrongabriel/threads/Produtor.class ThreadProdutorConsumidor/.project ThreadProdutorConsumidor org.eclipse.jdt.core.javabuilder org.eclipse.jdt.core.javanature ThreadProdutorConsumidor/src/com/ayrongabriel/threads/Produtor.java package com.ayrongabriel.threads; import java.util.Random; public class Produtor implements Runnable { private InterfaceBuffer buffer; private Random random = new Random(); public Produtor(InterfaceBuffer buffer) { this.buffer = buffer; } @Override public void run() { int total = 0; for (int i = 0; i < 5; i++) { try { Thread.sleep(random.nextInt(3000)); total += i; buffer.set(i); System.out.println("\t"+ total); System.out.println("---------------------------"); } catch (InterruptedException e) {} } } } ThreadProdutorConsumidor/src/com/ayrongabriel/threads/BufferSincronizado.java package com.ayrongabriel.threads; public class BufferSincronizado implements InterfaceBuffer { private int valor = -1; private boolean ocupado = false; @Override public synchronized void set(int valor) throws InterruptedException { while (ocupado) { System.out.println("================================="); System.out.println("Buffer cheio. Produtor aguarde..."); System.out.println("================================="); wait(); } System.out.print("PRODUTOR["+ valor+"] "+ "produziu "); this.valor = valor; ocupado = true; notifyAll(); } @Override public synchronized int get() throws InterruptedException { while(!ocupado){ System.out.println("==================================="); System.out.println("Buffer vazio. Consumidor aguarde..."); System.out.println("==================================="); wait(); } System.out.print("consumidor[" + valor+"] "+ "CONSUMIDOR "); ocupado = false; notifyAll(); return valor; } } ThreadProdutorConsumidor/bin/com/ayrongabriel/threads/BufferTeste.class ThreadProdutorConsumidor/bin/com/ayrongabriel/threads/BufferSincronizado.class ThreadProdutorConsumidor/src/com/ayrongabriel/threads/BufferTeste.java package com.ayrongabriel.threads; public class BufferTeste { public static void main(String[] args) { //Buffer b = new BufferNaoSincronizado(); InterfaceBuffer b = new BufferSincronizado(); new Thread(new Produtor(b)).start(); new Thread(new Consumidor(b)).start(); } } ThreadProdutorConsumidor/.classpath ThreadProdutorConsumidor/bin/com/ayrongabriel/threads/BufferNaoSincronizado.class ThreadProdutorConsumidor/src/com/ayrongabriel/threads/InterfaceBuffer.java package com.ayrongabriel.threads; /** * A <code>interfaceBuffer</code> representa um elo de ligação entre objetos <i>produtores</i> e <i>consumidores</i> de informações. * Os produtores utilizam a interfaceBuffer para gravar as informações e compartilhar com os consumidores * que lêem os dados da interfaceBuffer para fazer o processamento. * * @author Ayron Gabriel * * @version 1.0 * * @since 1.0 * * @see BufferNaoSincronizado * @see BufferSincronizado * */ public interface InterfaceBuffer { /** * Armazena o valor informado no Buffer. Geralmente será chamado pelas classes Produtoras de dados. * * @param valor * @throws InterruptedException */ public void set(int valor) throws InterruptedException; /** * Recupera as informações armazenadas no buffer. * Esse método será chamados pelas comidoras de dados. * * @return * @throws InterruptedException */ public int get() throws InterruptedException; } ThreadProdutorConsumidor/src/com/ayrongabriel/threads/BufferNaoSincronizado.java package com.ayrongabriel.threads; /** * Implementa a <code>interfaceBuffer</code> sem sicronismo. * * @author Ayron Gabriel * * */ public class BufferNaoSincronizado implements InterfaceBuffer { private int valor = -1; @Override public void set(int valor) throws InterruptedException { System.out.print("Produziu : "+valor); this.valor = valor; } @Override public int get() throws InterruptedException { System.out.print("Consumiu : "+ valor + "\t"); return valor; } } ThreadProdutorConsumidor/src/com/ayrongabriel/threads/Consumidor.java package com.ayrongabriel.threads; import java.util.Random; public class Consumidor implements Runnable { private InterfaceBuffer buffer; private Random random = new Random(); public Consumidor(InterfaceBuffer buffer) { this.buffer = buffer; } @Override public void run() { int total = 0; for (int i = 0; i < 5; i++) { try { Thread.sleep(random.nextInt(3000)); total += buffer.get(); System.out.println(" " + total); System.out.println("---------------------------"); } catch (InterruptedException e) {} } } }
Compartilhar