diff --git a/os/code/os/src/main/java/com/scaler/addersubtractor/Adder.java b/os/code/os/src/main/java/com/scaler/addersubtractor/Adder.java new file mode 100644 index 0000000..d42c8f2 --- /dev/null +++ b/os/code/os/src/main/java/com/scaler/addersubtractor/Adder.java @@ -0,0 +1,22 @@ +package com.scaler.addersubtractor; + +import lombok.AllArgsConstructor; + +@AllArgsConstructor +public class Adder implements Runnable { + private Count count; + + @Override + public void run() { + + for (int i = 1; i <= 100; ++i) { + count.getValue().getAndAdd(i); + try { + Thread.sleep(10); + } catch (Exception e) { + System.out.println("Something wrong happened"); + } + } + + } +} diff --git a/os/code/os/src/main/java/com/scaler/addersubtractor/Count.java b/os/code/os/src/main/java/com/scaler/addersubtractor/Count.java new file mode 100644 index 0000000..348de30 --- /dev/null +++ b/os/code/os/src/main/java/com/scaler/addersubtractor/Count.java @@ -0,0 +1,15 @@ +package com.scaler.addersubtractor; + +import java.util.concurrent.atomic.AtomicInteger; + +public class Count { + private AtomicInteger value = new AtomicInteger(0); + + public AtomicInteger getValue() { + return value; + } + + public void setValue(AtomicInteger value) { + this.value = value; + } +} diff --git a/os/code/os/src/main/java/com/scaler/addersubtractor/Runner.java b/os/code/os/src/main/java/com/scaler/addersubtractor/Runner.java new file mode 100644 index 0000000..795718c --- /dev/null +++ b/os/code/os/src/main/java/com/scaler/addersubtractor/Runner.java @@ -0,0 +1,27 @@ +package com.scaler.addersubtractor; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +public class Runner { + public static void main(String[] args) { + Count count = new Count(); + + Adder adder = new Adder(count); + Subtractor subtractor = new Subtractor(count); + + ExecutorService executor = Executors.newCachedThreadPool(); + executor.execute(adder); + executor.execute(subtractor); + + executor.shutdown(); + try { + executor.awaitTermination(100, TimeUnit.SECONDS); + } catch (Exception e) { + System.out.println("Something wrong happened"); + } + + System.out.println(count.getValue()); + } +} diff --git a/os/code/os/src/main/java/com/scaler/addersubtractor/Subtractor.java b/os/code/os/src/main/java/com/scaler/addersubtractor/Subtractor.java new file mode 100644 index 0000000..ae80473 --- /dev/null +++ b/os/code/os/src/main/java/com/scaler/addersubtractor/Subtractor.java @@ -0,0 +1,28 @@ +package com.scaler.addersubtractor; + +import java.util.concurrent.locks.Lock; + +import lombok.AllArgsConstructor; + +@AllArgsConstructor +public class Subtractor implements Runnable { + private Count count; + + @Override + public void run() { + + for (int i = 1; i <= 100; ++i) { + count.getValue().getAndAdd(-i); + try { + Thread.sleep(10); + } catch (Exception e) { + System.out.println("Something wrong happened"); + } + + for (int j = 0; j < 10000; ++j) { + // do something + } + } + + } +} \ No newline at end of file