diff --git a/src/main/java/lab/Buffer.java b/src/main/java/lab/Buffer.java
new file mode 100644
index 0000000000000000000000000000000000000000..b948e1f4dfec8c5f56cc51e129dcc8551a06e4fd
--- /dev/null
+++ b/src/main/java/lab/Buffer.java
@@ -0,0 +1,50 @@
+package lab;
+
+import java.util.Queue;
+import java.util.LinkedList;
+
+public class Buffer {
+	private Queue<Integer> datas;
+	private final int maximumCapacity; // maximum size of the buffer
+	private int nbItems;
+
+	public Buffer(int capacity) {
+		maximumCapacity = capacity;
+		datas = new LinkedList<Integer>();
+		nbItems = 0;
+	}
+
+	public synchronized int get(int consumerNo) throws InterruptedException {
+
+		while (datas.size() == 0) {
+			System.out.println("No more resources! Consumer " 
+								+ consumerNo + " waiting to draw a resource.");
+			wait();
+		}
+
+		int data = datas.remove();
+		--nbItems;
+		
+		System.out.println("Consumer " + consumerNo + " has withdrawn " 
+							+ data + " ==> resources : " + datas);
+		
+		notifyAll();
+		return data;
+	}
+
+	public synchronized void put(int data, int producerNo) throws InterruptedException {
+
+		while (nbItems == maximumCapacity) {
+			System.out.println("Resources at maximum! Producer " + producerNo 
+								+ " waiting to deposit a new resource.");
+			wait();
+		}
+
+		datas.add(data);
+		++nbItems;
+
+		System.out.println("Producer " + producerNo + " has deposited " 
+							+ data + " ==> resources : " + datas);
+		notifyAll();
+	}
+}
diff --git a/src/main/java/lab/TestProducerConsumer.java b/src/main/java/lab/TestProducerConsumer.java
new file mode 100644
index 0000000000000000000000000000000000000000..351b0980d46f57917f712078f27c39f89671b94a
--- /dev/null
+++ b/src/main/java/lab/TestProducerConsumer.java
@@ -0,0 +1,75 @@
+package lab;
+
+public class TestProducerConsumer {
+
+	public static void main(String[] args) {
+        
+		Buffer buffer = new Buffer(4);
+       
+		Producer p1 = new Producer(buffer, 1);
+		Producer p2 = new Producer(buffer, 2);
+		Consumer c1 = new Consumer(buffer, 1);
+		Consumer c2 = new Consumer(buffer, 2);
+        
+        p1.start();
+        p2.start();
+        c1.start();
+        c2.start();
+    }
+}
+
+
+/***************************************************************************************
+
+EXECUTION EXAMPLE
+
+Producer 1 deposited 1 ==> resources: [1]
+DEPOSIT 1
+Producer 1 deposited 2 ==> resources: [1, 2]
+DEPOSIT 2
+Consumer 1 withdrew 1 ==> resources: [2]
+Producer 2 deposited 1 ==> resources: [2, 1]
+DEPOSIT 1
+Producer 2 deposited 2 ==> resources: [2, 1, 2]
+DEPOSIT 2
+Producer 2 deposited 3 ==> resources: [2, 1, 2, 3]
+DEPOSIT 3
+Resources at maximum! Producer 2 waiting to deposit a new resource.
+CONSUME 1
+Consumer 2 withdrew 2 ==> resources: [1, 2, 3]
+CONSUME 2
+Producer 1 deposited 3 ==> resources: [1, 2, 3, 3]
+DEPOSIT 3
+Resources at maximum! Producer 2 waiting to deposit a new resource.
+Resources at maximum! Producer 1 waiting to deposit a new resource.
+Consumer 1 withdrew 1 ==> resources: [2, 3, 3]
+CONSUME 1
+Producer 2 deposited 4 ==> resources: [2, 3, 3, 4]
+DEPOSIT 4
+Resources at maximum! Producer 1 waiting to deposit a new resource.
+Resources at maximum! Producer 2 waiting to deposit a new resource.
+Consumer 2 withdrew 2 ==> resources: [3, 3, 4]
+CONSUME 2
+Producer 1 deposited 4 ==> resources: [3, 3, 4, 4]
+DEPOSIT 4
+Resources at maximum! Producer 2 waiting to deposit a new resource.
+Resources at maximum! Producer 1 waiting to deposit a new resource.
+Consumer 1 withdrew 3 ==> resources: [3, 4, 4]
+CONSUME 3
+Producer 2 deposited 5 ==> resources: [3, 4, 4, 5]
+DEPOSIT 5
+Resources at maximum! Producer 1 waiting to deposit a new resource.
+Consumer 1 withdrew 3 ==> resources: [4, 4, 5]
+CONSUME 3
+Producer 1 deposited 5 ==> resources: [4, 4, 5, 5]
+DEPOSIT 5
+Consumer 1 withdrew 4 ==> resources: [4, 5, 5]
+CONSUME 4
+Consumer 2 withdrew 4 ==> resources: [5, 5]
+CONSUME 4
+Consumer 2 withdrew 5 ==> resources: [5]
+CONSUME 5
+Consumer 2 withdrew 5 ==> resources: []
+CONSUME 5
+
+***************************************************************************************/