From b044c5bccace64c56522860528bf45144907c6bc Mon Sep 17 00:00:00 2001 From: qdo_ln <4yu@bk.ru> Date: Mon, 22 Jul 2019 12:28:08 +0300 Subject: [PATCH] Java3 lesson 4 homework. --- src/lesson4/Main.java | 18 +++++++++++++ src/lesson4/MyThread.java | 55 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 src/lesson4/Main.java create mode 100644 src/lesson4/MyThread.java diff --git a/src/lesson4/Main.java b/src/lesson4/Main.java new file mode 100644 index 0000000..e9ec098 --- /dev/null +++ b/src/lesson4/Main.java @@ -0,0 +1,18 @@ +package lesson4; + +public class Main { + public static void main(String[] args) { + MyThread mt = new MyThread(); + new Thread(() -> { + mt.printA(); + }).start(); + new Thread(() -> { + mt.printB(); + }).start(); + + new Thread(() -> { + mt.printC(); + }).start(); + } + +} diff --git a/src/lesson4/MyThread.java b/src/lesson4/MyThread.java new file mode 100644 index 0000000..f8aadd8 --- /dev/null +++ b/src/lesson4/MyThread.java @@ -0,0 +1,55 @@ +package lesson4; + +public class MyThread { + private Object monitor = new Object(); + private volatile char currentLetter = 'A'; + + public void printA() { + synchronized (monitor) { + try { + for (int i = 5; i > 0; i--) { + while (currentLetter != 'A') + monitor.wait(); + System.out.print("A"); + currentLetter = 'B'; + monitor.notifyAll(); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + public void printB() { + synchronized (monitor) { + try { + for (int i = 5; i > 0; i--) { + while (currentLetter != 'B') + monitor.wait(); + System.out.print("B"); + currentLetter = 'C'; + monitor.notifyAll(); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + public void printC() { + synchronized (monitor) { + try { + for (int i = 5; i > 0; i--) { + while (currentLetter != 'C') + monitor.wait(); + System.out.print("C"); + currentLetter = 'A'; + monitor.notifyAll(); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + +}