From a64a94a44ccb38c15e070cf8e62dcc5750d9d2ef Mon Sep 17 00:00:00 2001 From: Dzzhodddi <69247957+Dzhodddi@users.noreply.github.com> Date: Mon, 1 Jun 2026 22:59:55 +0300 Subject: [PATCH] add practice 2 --- .../src/main/java/practice2/tiktak/Data.java | 35 +++++++++++++++++-- .../src/main/java/practice2/tiktak/Main.java | 5 ++- .../main/java/practice2/tiktak/Worker.java | 4 ++- 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/practice-2-sample/src/main/java/practice2/tiktak/Data.java b/practice-2-sample/src/main/java/practice2/tiktak/Data.java index 88167ae..905ea5d 100644 --- a/practice-2-sample/src/main/java/practice2/tiktak/Data.java +++ b/practice-2-sample/src/main/java/practice2/tiktak/Data.java @@ -8,13 +8,42 @@ public int getState() { return state; } - public void Tic() { + public synchronized void Tic() { + while (state != 1) { + try { + wait(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } System.out.print("Tic-"); state = 2; + notifyAll(); } - public void Tak() { - System.out.println("Tak"); + public synchronized void Tak() { + while (state != 2) { + try { + wait(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + System.out.print("Tak-"); + state = 3; + notifyAll(); + } + + public synchronized void Toy() { + while (state != 3) { + try { + wait(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + System.out.println("Toy"); state = 1; + notifyAll(); } } \ No newline at end of file diff --git a/practice-2-sample/src/main/java/practice2/tiktak/Main.java b/practice-2-sample/src/main/java/practice2/tiktak/Main.java index 36faffc..8feb96c 100644 --- a/practice-2-sample/src/main/java/practice2/tiktak/Main.java +++ b/practice-2-sample/src/main/java/practice2/tiktak/Main.java @@ -7,11 +7,14 @@ public static void main(String[] args) throws InterruptedException { Thread w1 = new Thread(new Worker(1, d)); Thread w2 = new Thread(new Worker(2, d)); + Thread w3 = new Thread(new Worker(3, d)); + w1.start(); w2.start(); + w3.start(); - w2.join(); + w3.join(); System.out.println("end of main..."); } } \ No newline at end of file diff --git a/practice-2-sample/src/main/java/practice2/tiktak/Worker.java b/practice-2-sample/src/main/java/practice2/tiktak/Worker.java index 0b4d302..ea1ef68 100644 --- a/practice-2-sample/src/main/java/practice2/tiktak/Worker.java +++ b/practice-2-sample/src/main/java/practice2/tiktak/Worker.java @@ -15,8 +15,10 @@ public void run() { for (int i = 0; i < 5; i++) { if (id == 1) { data.Tic(); - } else { + } else if (id == 2){ data.Tak(); + } else if (id == 3){ + data.Toy(); } } }