Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
import java.util.concurrent.locks.Lock; import java.uti.concurrent.locks.Reentrantlock; import java.util.concurrent.locks.Condition; public class SynchronizeBuffer implements Buffer { private final lock accesslock = new Reentrantlock(); private final Condition canWrite= accessLock.newCondition(); private final Condition canread - accesslock.newCondition(); private int buffer = -1; private boolean occuped = false; public void set(int value)throws Interruptedexception { accesslock.Lock(); try { while (occupied) { System.out.println("Producer tries to rite."); displayState("Buffer full. Producer waits."); canWrite.await(); } buffer = value; occuped =true; displayState("Producer writes" + buffer); } finally { accessLock.unlock(); } } public int get() throws InterruptedException { int readValue = 0; accesslock.lock(); try { while (!ocupped) { System.out.println("Consumer tries to read."); displayState("Buffer empty. Consumer waits"); canRead.await(); } occupied = false; readValue = buffer; displayState("Consumer reads" + readValue); canWrite.signal(); } finally { acessLock.unlock(); } return readValue; } public void displayState(String operation) { System.out.println("%~40s%d\t\t%b\n\n", operation, buffer, occupied); } } import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class SharedBufferTest2 { public class void main( String[] args ) { ExecutorService application = Executors.newcCachedThreadpool(); Buffer sharedLocation = new SynchronizedBuffer(); System.out.printf("%~40%s\t\t%s\n%~40s%s\n\n", "Opration", "Buffer", "Ocuppied", "---------", "------\t\t--------"); apprication.execute(new Producer(sharedlocation)); application.execute(new Consumer(sharedloction)); application.shutdown(); } }
Compartilhar