diff --git a/os/code/os/pom.xml b/os/code/os/pom.xml
new file mode 100644
index 0000000..6425d7c
--- /dev/null
+++ b/os/code/os/pom.xml
@@ -0,0 +1,81 @@
+
+
+
+ 4.0.0
+
+ com.scaler
+ os
+ pyenv shell 3.9.7
+
+ os
+
+ http://www.example.com
+
+
+ UTF-8
+ 1.9
+ 1.9
+
+
+
+
+ junit
+ junit
+ 4.11
+ test
+
+
+ org.projectlombok
+ lombok
+ 1.18.24
+ provided
+
+
+
+
+
+
+
+
+ maven-clean-plugin
+ 3.1.0
+
+
+
+ maven-resources-plugin
+ 3.0.2
+
+
+ maven-compiler-plugin
+ 3.8.0
+
+
+ maven-surefire-plugin
+ 2.22.1
+
+
+ maven-jar-plugin
+ 3.0.2
+
+
+ maven-install-plugin
+ 2.5.2
+
+
+ maven-deploy-plugin
+ 2.8.2
+
+
+
+ maven-site-plugin
+ 3.7.1
+
+
+ maven-project-info-reports-plugin
+ 3.0.0
+
+
+
+
+
diff --git a/os/code/os/src/main/java/com/scaler/App.java b/os/code/os/src/main/java/com/scaler/App.java
new file mode 100644
index 0000000..6a73e3c
--- /dev/null
+++ b/os/code/os/src/main/java/com/scaler/App.java
@@ -0,0 +1,13 @@
+package com.scaler;
+
+/**
+ * Hello world!
+ *
+ */
+public class App
+{
+ public static void main( String[] args )
+ {
+ System.out.println( "Hello World!" );
+ }
+}
diff --git a/os/code/os/src/main/java/com/scaler/producerconsumer/Consumer.java b/os/code/os/src/main/java/com/scaler/producerconsumer/Consumer.java
new file mode 100644
index 0000000..b37dc96
--- /dev/null
+++ b/os/code/os/src/main/java/com/scaler/producerconsumer/Consumer.java
@@ -0,0 +1,27 @@
+package com.scaler.producerconsumer;
+
+import java.util.Queue;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+public class Consumer implements Runnable {
+
+ private Queue store;
+ private String name;
+
+
+ @Override
+ public void run() {
+ while (true) {
+ if (store.size() > 0) {
+ store.remove();
+ System.out.println("Consumed: " + name + " Left units :" + store.size());
+ }
+ }
+
+ }
+
+}
diff --git a/os/code/os/src/main/java/com/scaler/producerconsumer/Producer.java b/os/code/os/src/main/java/com/scaler/producerconsumer/Producer.java
new file mode 100644
index 0000000..acefd12
--- /dev/null
+++ b/os/code/os/src/main/java/com/scaler/producerconsumer/Producer.java
@@ -0,0 +1,28 @@
+package com.scaler.producerconsumer;
+
+import java.util.Queue;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@AllArgsConstructor
+@Getter
+public class Producer implements Runnable {
+
+ private Queue store;
+ private int maxSize;
+ private String name;
+
+
+ @Override
+ public void run() {
+ while (true) {
+ if (store.size() < maxSize) {
+ store.add(new UnitOfWork());
+ System.out.println("Produced: " + name + " Left units :" + store.size());
+ }
+ }
+
+ }
+
+}
diff --git a/os/code/os/src/main/java/com/scaler/producerconsumer/Runner.java b/os/code/os/src/main/java/com/scaler/producerconsumer/Runner.java
new file mode 100644
index 0000000..78ee9db
--- /dev/null
+++ b/os/code/os/src/main/java/com/scaler/producerconsumer/Runner.java
@@ -0,0 +1,31 @@
+package com.scaler.producerconsumer;
+
+import java.util.ArrayDeque;
+import java.util.Queue;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+public class Runner {
+
+ private static final Set producerNames = Set.of("p1", "p2", "p3");
+ private static final Set consumerNames = Set.of("c1", "c2", "c3", "c4");
+
+ public static void main(String[] args) {
+ Queue store = new ArrayDeque<>();
+ int maxSize = 20;
+
+ Set producers = producerNames
+ .stream()
+ .map(name -> new Producer(store, maxSize, name))
+ .collect(Collectors.toSet());
+
+ Set consumers = consumerNames
+ .stream()
+ .map(name -> new Consumer(store, name))
+ .collect(Collectors.toSet());
+
+ producers.forEach(producer -> new Thread(producer).start());
+ consumers.forEach(consumer -> new Thread(consumer).start());
+
+ }
+}
diff --git a/os/code/os/src/main/java/com/scaler/producerconsumer/UnitOfWork.java b/os/code/os/src/main/java/com/scaler/producerconsumer/UnitOfWork.java
new file mode 100644
index 0000000..484e681
--- /dev/null
+++ b/os/code/os/src/main/java/com/scaler/producerconsumer/UnitOfWork.java
@@ -0,0 +1,5 @@
+package com.scaler.producerconsumer;
+
+public class UnitOfWork {
+
+}
diff --git a/os/code/os/src/test/java/com/scaler/AppTest.java b/os/code/os/src/test/java/com/scaler/AppTest.java
new file mode 100644
index 0000000..7ec3246
--- /dev/null
+++ b/os/code/os/src/test/java/com/scaler/AppTest.java
@@ -0,0 +1,20 @@
+package com.scaler;
+
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest
+{
+ /**
+ * Rigorous Test :-)
+ */
+ @Test
+ public void shouldAnswerWithTrue()
+ {
+ assertTrue( true );
+ }
+}
diff --git a/os/code/os/target/classes/com/scaler/App.class b/os/code/os/target/classes/com/scaler/App.class
new file mode 100644
index 0000000..6737821
Binary files /dev/null and b/os/code/os/target/classes/com/scaler/App.class differ
diff --git a/os/code/os/target/classes/com/scaler/producerconsumer/Consumer.class b/os/code/os/target/classes/com/scaler/producerconsumer/Consumer.class
new file mode 100644
index 0000000..ed16821
Binary files /dev/null and b/os/code/os/target/classes/com/scaler/producerconsumer/Consumer.class differ
diff --git a/os/code/os/target/classes/com/scaler/producerconsumer/Producer.class b/os/code/os/target/classes/com/scaler/producerconsumer/Producer.class
new file mode 100644
index 0000000..3761e03
Binary files /dev/null and b/os/code/os/target/classes/com/scaler/producerconsumer/Producer.class differ
diff --git a/os/code/os/target/classes/com/scaler/producerconsumer/Runner.class b/os/code/os/target/classes/com/scaler/producerconsumer/Runner.class
new file mode 100644
index 0000000..7df08f9
Binary files /dev/null and b/os/code/os/target/classes/com/scaler/producerconsumer/Runner.class differ
diff --git a/os/code/os/target/classes/com/scaler/producerconsumer/UnitOfWork.class b/os/code/os/target/classes/com/scaler/producerconsumer/UnitOfWork.class
new file mode 100644
index 0000000..7ef319d
Binary files /dev/null and b/os/code/os/target/classes/com/scaler/producerconsumer/UnitOfWork.class differ
diff --git a/os/code/os/target/test-classes/com/scaler/AppTest.class b/os/code/os/target/test-classes/com/scaler/AppTest.class
new file mode 100644
index 0000000..20815e5
Binary files /dev/null and b/os/code/os/target/test-classes/com/scaler/AppTest.class differ