From 63ade61972181c397b42826c0f27b7f7b506525e Mon Sep 17 00:00:00 2001 From: daadaadaah Date: Sun, 19 Feb 2023 23:11:43 +0900 Subject: [PATCH 1/4] =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20:=20=EB=8F=99=EC=9D=BC?= =?UTF-8?q?=ED=95=9C=2020000=EC=9D=B4=20=EB=82=98=EC=98=AC=EA=BA=BC?= =?UTF-8?q?=EB=9D=BC=EA=B3=A0=20=EC=98=88=EC=83=81=ED=96=88=EC=A7=80?= =?UTF-8?q?=EB=A7=8C,=2012935,=2015370=20=EB=93=B1=20=EC=98=88=EC=B8=A1?= =?UTF-8?q?=ED=95=A0=20=EC=88=98=20=EC=97=86=EB=8A=94=20=EC=88=AB=EC=9E=90?= =?UTF-8?q?=EB=93=A4=EC=9D=B4=20=EB=82=98=EC=99=94=EB=8B=A4.=20-=20?= =?UTF-8?q?=EB=98=90=ED=95=9C=20=EC=8B=A4=ED=96=89=ED=95=A0=20=EB=95=8C?= =?UTF-8?q?=EB=A7=88=EB=8B=A4=20=EB=8B=A4=EB=A5=B8=20=EC=88=AB=EC=9E=90?= =?UTF-8?q?=EA=B0=80=20=EB=82=98=EC=98=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit > 출력 결과 calc : 12935 calc : 15370 calc : 14816 calc : 14773 calc : 12905 --- practice/synchronized1/CommonCalculate.java | 21 +++++++++++++ .../synchronized1/ModifyAmountThread.java | 22 ++++++++++++++ practice/synchronized1/RunSync.java | 30 +++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 practice/synchronized1/CommonCalculate.java create mode 100644 practice/synchronized1/ModifyAmountThread.java create mode 100644 practice/synchronized1/RunSync.java diff --git a/practice/synchronized1/CommonCalculate.java b/practice/synchronized1/CommonCalculate.java new file mode 100644 index 000000000..09b3e8a2c --- /dev/null +++ b/practice/synchronized1/CommonCalculate.java @@ -0,0 +1,21 @@ +package synchronized1; + +public class CommonCalculate { + private int amount; + + public CommonCalculate() { + this.amount = 0; + } + + public void plus(int value) { + this.amount += value; + } + + public void minus(int value) { + this.amount -= value; + } + + public int getAmount() { + return this.amount; + } +} diff --git a/practice/synchronized1/ModifyAmountThread.java b/practice/synchronized1/ModifyAmountThread.java new file mode 100644 index 000000000..0252b2f40 --- /dev/null +++ b/practice/synchronized1/ModifyAmountThread.java @@ -0,0 +1,22 @@ +package synchronized1; + +public class ModifyAmountThread extends Thread { + private CommonCalculate calc; + private boolean addFlag; + + public ModifyAmountThread(CommonCalculate calc, boolean addFlag) { + this.calc = calc; + this.addFlag = addFlag; + } + + @Override + public void run() { + for (int i = 0; i < 10000; i++) { + if (addFlag) { + calc.plus(1); + } else { + calc.minus(1); + } + } + } +} diff --git a/practice/synchronized1/RunSync.java b/practice/synchronized1/RunSync.java new file mode 100644 index 000000000..f3258d637 --- /dev/null +++ b/practice/synchronized1/RunSync.java @@ -0,0 +1,30 @@ +package synchronized1; + +public class RunSync { + + public static void main(String[] args) { + RunSync runSync = new RunSync(); + for (int i = 0; i < 5; i++) { + runSync.runCommonCalculate(); + } + } + + public void runCommonCalculate() { + CommonCalculate calc = new CommonCalculate(); + + ModifyAmountThread thread1 = new ModifyAmountThread(calc, true); + ModifyAmountThread thread2 = new ModifyAmountThread(calc, true); + + thread1.start(); + thread2.start(); + + try { + thread1.join(); // 쓰레드가 종료될 때까지 기다리는 메소드 + thread2.join(); + + System.out.println("calc : "+calc.getAmount()); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } +} From fdb43a373ca1545f5ae53ee39c27eaafcff8923c Mon Sep 17 00:00:00 2001 From: daadaadaah Date: Mon, 20 Feb 2023 01:05:49 +0900 Subject: [PATCH 2/4] =?UTF-8?q?=ED=95=B4=EA=B2=B0=20:=20=EA=B4=80=EB=A0=A8?= =?UTF-8?q?=20=EB=A9=94=EC=84=9C=EB=93=9C=EC=97=90=20synchronized=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=ED=95=A8=EC=9C=BC=EB=A1=9C=EC=8D=A8=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=A0=95=ED=95=A9=EC=84=B1=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit > 출력 결과 calc : 20000 calc : 20000 calc : 20000 calc : 20000 calc : 20000 --- practice/synchronized1/CommonCalculate.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/practice/synchronized1/CommonCalculate.java b/practice/synchronized1/CommonCalculate.java index 09b3e8a2c..7009b8eb7 100644 --- a/practice/synchronized1/CommonCalculate.java +++ b/practice/synchronized1/CommonCalculate.java @@ -7,7 +7,7 @@ public CommonCalculate() { this.amount = 0; } - public void plus(int value) { + public synchronized void plus(int value) { this.amount += value; } From c493aed60e1d9b931f0931250b40207488741f10 Mon Sep 17 00:00:00 2001 From: daadaadaah Date: Mon, 20 Feb 2023 01:07:37 +0900 Subject: [PATCH 3/4] =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=A0=84?= =?UTF-8?q?=EC=B2=B4=EA=B0=80=20=EC=95=84=EB=8B=8C=20=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EB=B6=80=EB=B6=84=EB=A7=8C=20synchronized=20?= =?UTF-8?q?=EB=B8=94=EB=9F=AD=EC=9D=84=20=EC=A7=80=EC=A0=95=ED=95=A0=20?= =?UTF-8?q?=EC=88=98=20=EC=9E=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- practice/synchronized1/CommonCalculate.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/practice/synchronized1/CommonCalculate.java b/practice/synchronized1/CommonCalculate.java index 7009b8eb7..7ff112952 100644 --- a/practice/synchronized1/CommonCalculate.java +++ b/practice/synchronized1/CommonCalculate.java @@ -7,8 +7,13 @@ public CommonCalculate() { this.amount = 0; } - public synchronized void plus(int value) { - this.amount += value; + public void plus(int value) { + // ... + // 10만 줄.... + // ... + synchronized(this) { + this.amount += value; + } } public void minus(int value) { From a662152dbeb9c913fb1734b102377c264adbeeed Mon Sep 17 00:00:00 2001 From: daadaadaah Date: Mon, 20 Feb 2023 01:09:14 +0900 Subject: [PATCH 4/4] =?UTF-8?q?=EB=B3=84=EB=8F=84=EC=9D=98=20=EA=B0=9D?= =?UTF-8?q?=EC=B2=B4=EB=A5=BC=20=EC=84=A0=EC=96=B8=ED=95=B4=EC=84=9C=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=ED=95=A0=20=EC=88=98=EB=8F=84=20=EC=9E=88?= =?UTF-8?q?=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- practice/synchronized1/CommonCalculate.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/practice/synchronized1/CommonCalculate.java b/practice/synchronized1/CommonCalculate.java index 7ff112952..dbe5e041f 100644 --- a/practice/synchronized1/CommonCalculate.java +++ b/practice/synchronized1/CommonCalculate.java @@ -7,11 +7,13 @@ public CommonCalculate() { this.amount = 0; } + Object lock = new Object(); + public void plus(int value) { // ... // 10만 줄.... // ... - synchronized(this) { + synchronized(lock) { this.amount += value; } }