From 1a74dc3e27ddd111d50ac9ea2cb07c958cab33ca Mon Sep 17 00:00:00 2001 From: ArnasSmicius Date: Tue, 2 Jan 2018 21:41:07 +0200 Subject: [PATCH] Producer and Consumer program. Java Util Concurency package --- Messages/.idea/workspace.xml | 32 ++- ProducerConsumer/.idea/description.html | 1 + ProducerConsumer/.idea/misc.xml | 12 + ProducerConsumer/.idea/modules.xml | 8 + ProducerConsumer/.idea/project-template.xml | 3 + ProducerConsumer/.idea/workspace.xml | 238 ++++++++++++++++++ ProducerConsumer/ProducerConsumer.iml | 12 + .../src/com/timbuchalka/Main.java | 75 ++++++ .../src/com/timbuchalka/ThreadColor.java | 11 + 9 files changed, 381 insertions(+), 11 deletions(-) create mode 100644 ProducerConsumer/.idea/description.html create mode 100644 ProducerConsumer/.idea/misc.xml create mode 100644 ProducerConsumer/.idea/modules.xml create mode 100644 ProducerConsumer/.idea/project-template.xml create mode 100644 ProducerConsumer/.idea/workspace.xml create mode 100644 ProducerConsumer/ProducerConsumer.iml create mode 100644 ProducerConsumer/src/com/timbuchalka/Main.java create mode 100644 ProducerConsumer/src/com/timbuchalka/ThreadColor.java diff --git a/Messages/.idea/workspace.xml b/Messages/.idea/workspace.xml index 663cf2a..16a7d39 100644 --- a/Messages/.idea/workspace.xml +++ b/Messages/.idea/workspace.xml @@ -1,10 +1,7 @@ - - - - + @@ -142,11 +139,10 @@ - + - @@ -157,7 +153,7 @@ - + @@ -168,6 +164,7 @@ + @@ -193,10 +190,23 @@ + + + + + + + + + + + + + - + diff --git a/ProducerConsumer/.idea/description.html b/ProducerConsumer/.idea/description.html new file mode 100644 index 0000000..db5f129 --- /dev/null +++ b/ProducerConsumer/.idea/description.html @@ -0,0 +1 @@ +Simple Java application that includes a class with main() method \ No newline at end of file diff --git a/ProducerConsumer/.idea/misc.xml b/ProducerConsumer/.idea/misc.xml new file mode 100644 index 0000000..5d75313 --- /dev/null +++ b/ProducerConsumer/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/ProducerConsumer/.idea/modules.xml b/ProducerConsumer/.idea/modules.xml new file mode 100644 index 0000000..d7b3989 --- /dev/null +++ b/ProducerConsumer/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/ProducerConsumer/.idea/project-template.xml b/ProducerConsumer/.idea/project-template.xml new file mode 100644 index 0000000..1f08b88 --- /dev/null +++ b/ProducerConsumer/.idea/project-template.xml @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/ProducerConsumer/.idea/workspace.xml b/ProducerConsumer/.idea/workspace.xml new file mode 100644 index 0000000..d6493cf --- /dev/null +++ b/ProducerConsumer/.idea/workspace.xml @@ -0,0 +1,238 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1514918607795 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ProducerConsumer/ProducerConsumer.iml b/ProducerConsumer/ProducerConsumer.iml new file mode 100644 index 0000000..d5c0743 --- /dev/null +++ b/ProducerConsumer/ProducerConsumer.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/ProducerConsumer/src/com/timbuchalka/Main.java b/ProducerConsumer/src/com/timbuchalka/Main.java new file mode 100644 index 0000000..4f1475b --- /dev/null +++ b/ProducerConsumer/src/com/timbuchalka/Main.java @@ -0,0 +1,75 @@ +package com.timbuchalka; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import static com.timbuchalka.Main.EOF; + +public class Main { + public static final String EOF = "EOF"; + + public static void main(String[] args) { + List buffer = new ArrayList<>(); + MyProducer producer = new MyProducer(buffer, ThreadColor.ANSI_RED); + MyConsumer consumer1 = new MyConsumer(buffer, ThreadColor.ANSI_PURPLE); + MyConsumer consumer2 = new MyConsumer(buffer, ThreadColor.ANSI_CYAN); + + new Thread(producer).start(); + new Thread(consumer1).start(); + new Thread(consumer2).start(); + } +} + +class MyProducer implements Runnable { + private List buffer; + private String color; + + public MyProducer(List buffer, String color) { + this.buffer = buffer; + this.color = color; + } + + public void run() { + Random random = new Random(); + String[] nums = { "1", "2", "3", "4", "5" }; + + for (String num: nums) { + try { + System.out.println(color + "Adding..." + num); + buffer.add(num); + + Thread.sleep(random.nextInt(1000)); + } catch (InterruptedException e) { + System.out.println("Producer was interrupted"); + } + } + + System.out.println(color + "Adding EOF and exiting..."); + buffer.add("EOF"); + } +} + +class MyConsumer implements Runnable { + private List buffer; + private String color; + + public MyConsumer(List buffer, String color) { + this.buffer = buffer; + this.color = color; + } + + public void run() { + while (true) { + if (buffer.isEmpty()) { + continue; + } + if(buffer.get(0).equals(EOF)) { + System.out.println(color + "Exiting"); + break; + } else { + System.out.println(color + "Removed " + buffer.remove(0)); + } + } + } +} \ No newline at end of file diff --git a/ProducerConsumer/src/com/timbuchalka/ThreadColor.java b/ProducerConsumer/src/com/timbuchalka/ThreadColor.java new file mode 100644 index 0000000..5cf6464 --- /dev/null +++ b/ProducerConsumer/src/com/timbuchalka/ThreadColor.java @@ -0,0 +1,11 @@ +package com.timbuchalka; + +public class ThreadColor { + public static final String ANSI_RESET = "\u001B[0m"; + public static final String ANSI_BLACK = "\u001B[30m"; + public static final String ANSI_RED = "\u001B[31m"; + public static final String ANSI_GREEN = "\u001B[32m"; + public static final String ANSI_BLUE = "\u001B[34m"; + public static final String ANSI_PURPLE = "\u001B[35m"; + public static final String ANSI_CYAN = "\u001B[36m"; +}