From f2e00eefdcf9cde59ba7611a2accaa7233a040ab Mon Sep 17 00:00:00 2001 From: iurii Date: Wed, 25 Dec 2024 17:39:33 +0100 Subject: [PATCH 1/3] SYN: added synchronized --- logs/app.log | 40 ++++++++++++++++++++++ src/main/java/core/basesyntax/Counter.java | 2 +- 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 logs/app.log diff --git a/logs/app.log b/logs/app.log new file mode 100644 index 00000000..fbfbd3c3 --- /dev/null +++ b/logs/app.log @@ -0,0 +1,40 @@ +INFO core.basesyntax.Counter:16 Before decrementing, Thread # 1, counter value 20 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 1, counter value 19 +INFO core.basesyntax.Counter:16 Before decrementing, Thread # 20, counter value 19 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 20, counter value 18 +INFO core.basesyntax.Counter:16 Before decrementing, Thread # 19, counter value 18 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 19, counter value 17 +INFO core.basesyntax.Counter:16 Before decrementing, Thread # 18, counter value 17 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 18, counter value 16 +INFO core.basesyntax.Counter:16 Before decrementing, Thread # 17, counter value 16 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 17, counter value 15 +INFO core.basesyntax.Counter:16 Before decrementing, Thread # 16, counter value 15 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 16, counter value 14 +INFO core.basesyntax.Counter:16 Before decrementing, Thread # 15, counter value 14 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 15, counter value 13 +INFO core.basesyntax.Counter:16 Before decrementing, Thread # 14, counter value 13 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 14, counter value 12 +INFO core.basesyntax.Counter:16 Before decrementing, Thread # 13, counter value 12 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 13, counter value 11 +INFO core.basesyntax.Counter:16 Before decrementing, Thread # 12, counter value 11 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 12, counter value 10 +INFO core.basesyntax.Counter:16 Before decrementing, Thread # 11, counter value 10 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 11, counter value 9 +INFO core.basesyntax.Counter:16 Before decrementing, Thread # 10, counter value 9 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 10, counter value 8 +INFO core.basesyntax.Counter:16 Before decrementing, Thread # 9, counter value 8 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 9, counter value 7 +INFO core.basesyntax.Counter:16 Before decrementing, Thread # 8, counter value 7 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 8, counter value 6 +INFO core.basesyntax.Counter:16 Before decrementing, Thread # 7, counter value 6 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 7, counter value 5 +INFO core.basesyntax.Counter:16 Before decrementing, Thread # 6, counter value 5 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 6, counter value 4 +INFO core.basesyntax.Counter:16 Before decrementing, Thread # 5, counter value 4 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 5, counter value 3 +INFO core.basesyntax.Counter:16 Before decrementing, Thread # 4, counter value 3 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 4, counter value 2 +INFO core.basesyntax.Counter:16 Before decrementing, Thread # 3, counter value 2 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 3, counter value 1 +INFO core.basesyntax.Counter:16 Before decrementing, Thread # 2, counter value 1 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 2, counter value 0 diff --git a/src/main/java/core/basesyntax/Counter.java b/src/main/java/core/basesyntax/Counter.java index 4af46bd4..feb1ad7d 100644 --- a/src/main/java/core/basesyntax/Counter.java +++ b/src/main/java/core/basesyntax/Counter.java @@ -12,7 +12,7 @@ public Counter(int value) { this.value = value; } - public void decreaseValue() { + public synchronized void decreaseValue() { logger.info(String.format(MESSAGE, "Before decrementing", Thread.currentThread().getName(), value)); value--; From e74ce3a36971a13cda7875e89da4cc3bf23c7f80 Mon Sep 17 00:00:00 2001 From: Yurii Date: Sat, 10 May 2025 16:44:25 +0200 Subject: [PATCH 2/3] SYN: with Atomic field --- src/main/java/core/basesyntax/Counter.java | 9 +++++---- src/main/java/core/basesyntax/Main.java | 4 +++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/java/core/basesyntax/Counter.java b/src/main/java/core/basesyntax/Counter.java index feb1ad7d..7d8e6d2b 100644 --- a/src/main/java/core/basesyntax/Counter.java +++ b/src/main/java/core/basesyntax/Counter.java @@ -1,21 +1,22 @@ package core.basesyntax; +import java.util.concurrent.atomic.AtomicInteger; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class Counter { private static final Logger logger = LogManager.getLogger(Counter.class); private static final String MESSAGE = "%20s, Thread # %2s, counter value %2d"; - private int value; + private AtomicInteger value; - public Counter(int value) { + public Counter(AtomicInteger value) { this.value = value; } - public synchronized void decreaseValue() { + public void decreaseValue() { logger.info(String.format(MESSAGE, "Before decrementing", Thread.currentThread().getName(), value)); - value--; + value.decrementAndGet(); logger.info(String.format(MESSAGE, "After decrementing", Thread.currentThread().getName(), value)); } diff --git a/src/main/java/core/basesyntax/Main.java b/src/main/java/core/basesyntax/Main.java index 48a2c730..d479077d 100644 --- a/src/main/java/core/basesyntax/Main.java +++ b/src/main/java/core/basesyntax/Main.java @@ -1,8 +1,10 @@ package core.basesyntax; +import java.util.concurrent.atomic.AtomicInteger; + public class Main { public static void main(String[] args) { - Counter counter = new Counter(20); + Counter counter = new Counter(new AtomicInteger(20)); for (int i = 1; i <= 20; i++) { new MyThread(counter, String.valueOf(i)).start(); } From b7f5fd3377c09c14019e51d0ada5fafc6dcde183 Mon Sep 17 00:00:00 2001 From: Yurii Date: Sat, 10 May 2025 16:58:12 +0200 Subject: [PATCH 3/3] SYN: fixed order of logs --- logs/app.log | 78 +++++++++++----------- src/main/java/core/basesyntax/Counter.java | 5 +- 2 files changed, 41 insertions(+), 42 deletions(-) diff --git a/logs/app.log b/logs/app.log index fbfbd3c3..1e043745 100644 --- a/logs/app.log +++ b/logs/app.log @@ -1,40 +1,40 @@ -INFO core.basesyntax.Counter:16 Before decrementing, Thread # 1, counter value 20 -INFO core.basesyntax.Counter:19 After decrementing, Thread # 1, counter value 19 -INFO core.basesyntax.Counter:16 Before decrementing, Thread # 20, counter value 19 -INFO core.basesyntax.Counter:19 After decrementing, Thread # 20, counter value 18 -INFO core.basesyntax.Counter:16 Before decrementing, Thread # 19, counter value 18 -INFO core.basesyntax.Counter:19 After decrementing, Thread # 19, counter value 17 -INFO core.basesyntax.Counter:16 Before decrementing, Thread # 18, counter value 17 -INFO core.basesyntax.Counter:19 After decrementing, Thread # 18, counter value 16 -INFO core.basesyntax.Counter:16 Before decrementing, Thread # 17, counter value 16 -INFO core.basesyntax.Counter:19 After decrementing, Thread # 17, counter value 15 -INFO core.basesyntax.Counter:16 Before decrementing, Thread # 16, counter value 15 -INFO core.basesyntax.Counter:19 After decrementing, Thread # 16, counter value 14 -INFO core.basesyntax.Counter:16 Before decrementing, Thread # 15, counter value 14 -INFO core.basesyntax.Counter:19 After decrementing, Thread # 15, counter value 13 -INFO core.basesyntax.Counter:16 Before decrementing, Thread # 14, counter value 13 -INFO core.basesyntax.Counter:19 After decrementing, Thread # 14, counter value 12 -INFO core.basesyntax.Counter:16 Before decrementing, Thread # 13, counter value 12 -INFO core.basesyntax.Counter:19 After decrementing, Thread # 13, counter value 11 -INFO core.basesyntax.Counter:16 Before decrementing, Thread # 12, counter value 11 -INFO core.basesyntax.Counter:19 After decrementing, Thread # 12, counter value 10 -INFO core.basesyntax.Counter:16 Before decrementing, Thread # 11, counter value 10 -INFO core.basesyntax.Counter:19 After decrementing, Thread # 11, counter value 9 -INFO core.basesyntax.Counter:16 Before decrementing, Thread # 10, counter value 9 -INFO core.basesyntax.Counter:19 After decrementing, Thread # 10, counter value 8 -INFO core.basesyntax.Counter:16 Before decrementing, Thread # 9, counter value 8 -INFO core.basesyntax.Counter:19 After decrementing, Thread # 9, counter value 7 -INFO core.basesyntax.Counter:16 Before decrementing, Thread # 8, counter value 7 -INFO core.basesyntax.Counter:19 After decrementing, Thread # 8, counter value 6 -INFO core.basesyntax.Counter:16 Before decrementing, Thread # 7, counter value 6 -INFO core.basesyntax.Counter:19 After decrementing, Thread # 7, counter value 5 -INFO core.basesyntax.Counter:16 Before decrementing, Thread # 6, counter value 5 +INFO core.basesyntax.Counter:17 Before decrementing, Thread # 8, counter value 20 +INFO core.basesyntax.Counter:17 Before decrementing, Thread # 16, counter value 20 +INFO core.basesyntax.Counter:17 Before decrementing, Thread # 12, counter value 20 +INFO core.basesyntax.Counter:17 Before decrementing, Thread # 15, counter value 20 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 16, counter value 19 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 15, counter value 18 +INFO core.basesyntax.Counter:17 Before decrementing, Thread # 10, counter value 20 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 12, counter value 17 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 10, counter value 16 +INFO core.basesyntax.Counter:17 Before decrementing, Thread # 9, counter value 20 +INFO core.basesyntax.Counter:17 Before decrementing, Thread # 5, counter value 20 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 9, counter value 15 +INFO core.basesyntax.Counter:17 Before decrementing, Thread # 13, counter value 20 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 5, counter value 14 +INFO core.basesyntax.Counter:17 Before decrementing, Thread # 1, counter value 20 +INFO core.basesyntax.Counter:17 Before decrementing, Thread # 4, counter value 20 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 13, counter value 13 +INFO core.basesyntax.Counter:17 Before decrementing, Thread # 17, counter value 13 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 4, counter value 11 +INFO core.basesyntax.Counter:17 Before decrementing, Thread # 14, counter value 20 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 17, counter value 10 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 14, counter value 9 +INFO core.basesyntax.Counter:17 Before decrementing, Thread # 3, counter value 20 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 1, counter value 12 +INFO core.basesyntax.Counter:17 Before decrementing, Thread # 11, counter value 20 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 3, counter value 8 +INFO core.basesyntax.Counter:17 Before decrementing, Thread # 18, counter value 8 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 11, counter value 7 +INFO core.basesyntax.Counter:17 Before decrementing, Thread # 6, counter value 20 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 18, counter value 6 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 8, counter value 5 INFO core.basesyntax.Counter:19 After decrementing, Thread # 6, counter value 4 -INFO core.basesyntax.Counter:16 Before decrementing, Thread # 5, counter value 4 -INFO core.basesyntax.Counter:19 After decrementing, Thread # 5, counter value 3 -INFO core.basesyntax.Counter:16 Before decrementing, Thread # 4, counter value 3 -INFO core.basesyntax.Counter:19 After decrementing, Thread # 4, counter value 2 -INFO core.basesyntax.Counter:16 Before decrementing, Thread # 3, counter value 2 -INFO core.basesyntax.Counter:19 After decrementing, Thread # 3, counter value 1 -INFO core.basesyntax.Counter:16 Before decrementing, Thread # 2, counter value 1 -INFO core.basesyntax.Counter:19 After decrementing, Thread # 2, counter value 0 +INFO core.basesyntax.Counter:17 Before decrementing, Thread # 7, counter value 20 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 7, counter value 3 +INFO core.basesyntax.Counter:17 Before decrementing, Thread # 2, counter value 20 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 2, counter value 2 +INFO core.basesyntax.Counter:17 Before decrementing, Thread # 19, counter value 2 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 19, counter value 1 +INFO core.basesyntax.Counter:17 Before decrementing, Thread # 20, counter value 1 +INFO core.basesyntax.Counter:19 After decrementing, Thread # 20, counter value 0 diff --git a/src/main/java/core/basesyntax/Counter.java b/src/main/java/core/basesyntax/Counter.java index 7d8e6d2b..7afba64f 100644 --- a/src/main/java/core/basesyntax/Counter.java +++ b/src/main/java/core/basesyntax/Counter.java @@ -15,9 +15,8 @@ public Counter(AtomicInteger value) { public void decreaseValue() { logger.info(String.format(MESSAGE, - "Before decrementing", Thread.currentThread().getName(), value)); - value.decrementAndGet(); + "Before decrementing", Thread.currentThread().getName(), value.get())); logger.info(String.format(MESSAGE, - "After decrementing", Thread.currentThread().getName(), value)); + "After decrementing", Thread.currentThread().getName(), value.decrementAndGet())); } }