๋ฐ์ํ
๐ก ์ฐ๋ ๋ ๋๊ธฐํThread synchronization
ํ ์ฐ๋ ๋๊ฐ ์งํ์ค์ธ ์์ ์ ๋ค๋ฅธ ์ฐ๋ ๋๊ฐ ๊ฐ์ญํ์ง ๋ชปํ๊ฒ ํ๋ ๊ฒ์ ๋งํ๋ค.
- ๋ฉํฐ ์ฐ๋ ๋์์๋ ๋ค๋ฅธ ์ฐ๋ ๋์ ์์
์ ์ํฅ์ ๋ฏธ์น ์ ์๋ค.
- ์งํ์ค์ธ ์์
์ด ๊ฐ์ญ ๋ฐ์ง ์๊ฒ ํ๋ ค๋ฉด '๋๊ธฐํ'๊ฐ ํ์ํ๋ค.
- ๋๊ธฐํํ๋ ค๋ฉด ๊ฐ์ญ๋ฐ์ง ์์์ผ ํ๋ ๋ฌธ์ฅ์ '์๊ณ ์์ญcritical section'์ผ๋ก ์ค์ ํ๋ค.
- ์๊ณ์์ญ์ ๋ฝRock(์๋ฌผ์ )์ ์ป์ ๋จ ํ๋์ ์ฐ๋ ๋๋ง ์ถ์
๊ฐ๋ฅํ๋ค.
(๊ฐ์ฒด 1๊ฐ๋น ๋ฝ 1๊ฐ)
synchronized๋ฅผ ์ด์ฉํ ๋๊ธฐํ
→ ์๊ณ์์ญ ๋ง๋ค๊ธฐ
๐ก ์๊ณ์์ญ์ ๊ฐฏ์์ ์์ญ์ ์ต์ํํด์ผ ํ๋ค.
๋๋ฌธ์ ๋ฉ์๋ ์ ์ฒด ์ฌ์ฉ์ ์ง์ํด์ผ ํ๋ค.
๋ฐ๋ผ์ ์์ 2๋ฒ์งธ๋ฅผ ๊ถ์ฅํ๋ค.
์์ 1
- spendMoney100()๋ฉ์๋์ synchronized๋ฅผ ๋ถ์ฌ ์๊ณ์์ญ์ ๋ง๋ค์์์๋ ์๋ชป๋ ๊ฒฐ๊ณผ๊ฐ ๋์๋ฒ๋ ธ๋ค.
๊ฐ์์์
- th1๊ณผ th2๋ ์๋ฅผ ๋ค์๋ฉด ํธ๋ํฐ์ผ๋ก ๋ญ๊ฐ๋ฅผ ๊ฒฐ์ ํ๋ฉด์ ํธ์์ ์์ ์นด๋๋ก ๋ญ๊ฐ๋ฅผ ์ฌ๊ณ ์๋ค ์น์, ์ด ๋ ๋์์ ์ถ๊ธ์ด ์ผ์ด๋ ๋ ๊ณ์ข๊ฐ 0์์ผ ๊ฒฝ์ฐ ๊ฒฐ์ ๊ฐ ์๋๊ฒ ํด์ผํ๋ค๋ฉด
- ์์ ๊ฐ์ด synchronized๋ฅผ ์ฌ์ฉํด ์๊ณ์์ญ์ ๋ง๋ค์ด ๋๊ธฐํ ํด์ผ๋ง ํ๋ค.
- ์ ์ฝ๋์์ withdraw() ๋ฉ์๋๋ง ์๊ณ์์ญ์ผ๋ก ๋ง๋ค์ด๋ ๋๋ ์ด์ ๋ ๊ณ์ข์กฐํ๋ฅผ ํด๋น ๋ฉ์๋์์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค.
โ ์กฐํ ํ๋ ๋ณ์๋ private์ด์ด์ผ๋ง ํ๋ค.
๋ค๋ฅธ ๊ณณ์์ ๋ณ์์ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ์๋๋๊น.
๋ฐ์ํ
'โ JAVA > โ Class & Method' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA]Predicate ๊ฒฐํฉ, Function ๊ฒฐํฉ (0) | 2024.12.12 |
---|---|
[JAVA][Thread]wait() & notify() (0) | 2024.12.10 |
[JAVA][Thread]join() & yield() (0) | 2024.12.09 |
[JAVA][Thread]suspend() resume() stop(). ์ผ์์ ์ง, ์ฌ๊ฐ, ์์ ์ ์ง (0) | 2024.12.06 |
[JAVA][Thread]์ํ์ ์คํ์ ์ด. sleep() & interrupt() (1) | 2024.12.05 |