diff --git a/ErzeugerVerbraucher/.idea/misc.xml b/ErzeugerVerbraucher/.idea/misc.xml index e2ca0b8d9550af3b7d7fdff7358bb4da44e578ca..f52b70fae30c655c0df94618f1b63d3236de6fe0 100644 --- a/ErzeugerVerbraucher/.idea/misc.xml +++ b/ErzeugerVerbraucher/.idea/misc.xml @@ -3,4 +3,9 @@ <component name="ProjectRootManager" version="2" languageLevel="JDK_17" project-jdk-name="openjdk-18" project-jdk-type="JavaSDK"> <output url="file://$PROJECT_DIR$/out" /> </component> + <component name="SwUserDefinedSpecifications"> + <option name="specTypeByUrl"> + <map /> + </option> + </component> </project> \ No newline at end of file diff --git a/ErzeugerVerbraucher/src/Buffer.java b/ErzeugerVerbraucher/src/Buffer.java index f65face45c55ed398b67db5ca466d2a48d34cf49..e91ea1b08656681d1f1fe36aea5520a6118984b6 100644 --- a/ErzeugerVerbraucher/src/Buffer.java +++ b/ErzeugerVerbraucher/src/Buffer.java @@ -1,38 +1,53 @@ -import java.nio.BufferOverflowException; -import java.nio.BufferUnderflowException; import java.util.ArrayList; -import java.util.List; import java.util.concurrent.Semaphore; -import java.lang.Thread; -public class Buffer<T>{ - public int size; - public Semaphore mutex; - List<T> items = new ArrayList<T>(); +import java.lang.*; - public Buffer(int size) { - this.size= size; - -//BufferOVerflowException, wenn Buffer voll ist und dennoch Element geschrieben werden will - public void push(Buffer<T> e){ - if() - mutex.acquire(); - items.add(T.e); - mutex.release(); +public class Buffer<T> { + int size; + public Semaphore sem; + public ArrayList<T> items = new ArrayList<T>(size); + public Buffer(int size){ + assert size >= 0; + this.size = size; } -//BufferUnderflowException wenn Buffer leer ist und dennoch Element gelesen werden will - public void pop(Buffer<T> e){ + + public void push(T e) throws InterruptedException { + assert(e!=null); + assert(!full()); + if(this.full()) { + System.out.println("Buffer is full"); + } + this.sem.acquire(); + items.add(e); + this.sem.release(); } - public boolean full(){ - assert items.size()>=0 : "Buffer cannot be less than 0 in size"; +// public ArrayList<T> pop() throws InterruptedException{ +// sem.acquire(); +// item = items.remove(0); +// sem.release(); +// return item; +// +// } - } + public boolean full() throws InterruptedException { + sem.acquire(); + boolean is_full = items.size()==size; + sem.release(); - public boolean empty(){ + return is_full; + + } + + public boolean empty() throws InterruptedException { + sem.acquire(); + boolean is_empty = items.size()==0; + sem.release(); + + return is_empty; - } } } diff --git a/ErzeugerVerbraucher/src/Consumer.java b/ErzeugerVerbraucher/src/Consumer.java index d57c4739363c3f20a64451355d251097eee8fd78..2b16e6a3695443a1d5e39edc11f4c630705f0fb9 100644 --- a/ErzeugerVerbraucher/src/Consumer.java +++ b/ErzeugerVerbraucher/src/Consumer.java @@ -1,2 +1,34 @@ -public class Consumer { +import com.sun.jdi.event.ThreadDeathEvent; +import com.sun.jdi.event.ThreadStartEvent; + +import java.util.Random; +import java.lang.*; + +public class Consumer{ + int interval; + ThreadDeathEvent consumerThread; + ThreadStartEvent producerThread; + Buffer buffer; + public Consumer(Buffer buffer, int interval, ThreadDeathEvent consumerThread, ThreadStartEvent producerThread) { + assert buffer != null; + assert interval > 0; + this.buffer = buffer; + this.interval = interval; + this.consumerThread = consumerThread; + this.producerThread = producerThread; + this.run(); + + assert this.interval == interval; + } + public void run() throws InterruptedException{ + assert this.interval > 0; + + while(this.interval > 0) { + Thread.sleep(new Random().nextInt(interval)); + + boolean was_full = this.buffer.full(); + assert was_full instanceof + if(!this.consumerThread.) + } + } } diff --git a/ErzeugerVerbraucher/src/Main.java b/ErzeugerVerbraucher/src/Main.java index 9b19be51048efdf548fdda82ac6f0310b157f8bd..df9fa5fe8668f1980bd6e02e19aeea7bf25d6c89 100644 --- a/ErzeugerVerbraucher/src/Main.java +++ b/ErzeugerVerbraucher/src/Main.java @@ -1,7 +1,12 @@ public class Main { public static void main(String[] args) { + Buffer b1 = new Buffer(5); + try { + b1.push(5); + } catch (InterruptedException e) { + System.out.println(e); + } - Buffer b1 = new Buffer(5); //Capacity of the Buffer } -} \ No newline at end of file +}