diff --git a/src/exercicses/ex_d/EmptyingThread.java b/src/exercicses/ex_d/EmptyingThread.java new file mode 100644 index 0000000..cbcc551 --- /dev/null +++ b/src/exercicses/ex_d/EmptyingThread.java @@ -0,0 +1,23 @@ +package exercicses.ex_d; + +import java.util.Stack; + +public class EmptyingThread extends Thread { + private Stack source; + private Stack target; + + public EmptyingThread(Stack source, Stack target) { + this.source = source; + this.target = target; + } + + @Override + public void run() { + int v; + while (!source.isEmpty()) { + v = source.pop(); + System.out.println("Number popped from source stack and pushed to target stack: " + v); + target.push(v); + } + } +} diff --git a/src/exercicses/ex_d/FillingThread.java b/src/exercicses/ex_d/FillingThread.java new file mode 100644 index 0000000..276bb0c --- /dev/null +++ b/src/exercicses/ex_d/FillingThread.java @@ -0,0 +1,31 @@ +package exercicses.ex_d; + +import java.util.Stack; + +public class FillingThread extends Thread { + private Stack source; + private Stack target; + private Thread emptyingThread; + + public FillingThread(Stack source, Stack target, Thread emptyingThread) { + this.source = source; + this.target = target; + this.emptyingThread = emptyingThread; + } + + @Override + public void run() { + try { + emptyingThread.join(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + System.out.println("--- Starting Filling back ---"); + int v; + while (!target.isEmpty()) { + v = target.pop(); + System.out.println("From target stack to source stack " + v); + source.push(v); + } + } +} \ No newline at end of file diff --git a/src/exercicses/ex_d/TestingJoins.java b/src/exercicses/ex_d/TestingJoins.java new file mode 100644 index 0000000..8f88b82 --- /dev/null +++ b/src/exercicses/ex_d/TestingJoins.java @@ -0,0 +1,18 @@ +package exercicses.ex_d; + +import java.util.Stack; + +public class TestingJoins { + public static void main(String[] args) { + Stack sourceStack = new Stack(); + Stack targetStack = new Stack(); + // Populating the first sourceStack + for (int i = 1; i <= 10; i++) { + sourceStack.push(i); + } + Thread emptyingThread = new EmptyingThread(sourceStack, targetStack); + Thread fillingThread = new FillingThread(sourceStack, targetStack, emptyingThread); + emptyingThread.start(); + fillingThread.start(); + } +}