2022. 5. 29. 19:02ใJAVA/์๋ฐ์ ์ ์
https://hyejin.tistory.com/594
1๏ธโฃ sleep(long mills) : ์ผ์ ์๊ฐ๋์ ์ฐ๋ ๋๋ฅผ ๋ฉ์ถ๊ฒ ํ๋ค.
sleep()์ ์ํด ์ผ์์ ์ง ์ํ๊ฐ ๋ ์ฐ๋ ๋๋ ์ง์ ๋ ์๊ฐ์ด ๋ค ๋๊ฑฐ๋ interrupt()๊ฐ ํธ์ถ๋๋ฉด (interruptedException ๋ฐ์), ์ ์์ ๊นจ์ด๋ ์คํ๋๊ธฐ ์ํ๊ฐ ๋๋ค.
๊ทธ๋์ sleep()์ ํธ์ถํ ๋๋ ํญ์ try-catch๋ฌธ์ผ๋ก ์์ธ๋ฅผ ์ฒ๋ฆฌํด์ค์ผ ํ๋ค.
-> th1์ด ๊ฐ์ฅ ๋จผ์ ์ข ๋ฃ๋๊ณ , th2, main ์์๋ก ์ข ๋ฃ๋๋ค.
์๋ํ๋ฉด sleep()์ static ๋ฉ์๋๋ก ํญ์ ํ์ฌ ์คํ ์ค์ธ ์ฐ๋ ๋์ ๋ํด ์๋ํ๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก ์ํฅ์ ๋ฐ๋ ๊ฒ์ main๋ฉ์๋๋ฅผ ์คํํ๋ main ์ค๋ ๋์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก sleep()์ static ์ผ๋ก ์ ์ธ๋์ด ์์ผ๋ฉฐ ์ฐธ์กฐ๋ณ์๋ฅผ ์ด์ฉํด์ ํธ์ถํ๊ธฐ ๋ณด๋ค๋ Thread.sleep()๊ณผ ๊ฐ์ด ํด์ผํ๋ค.
2๏ธโฃ interrupt() ์ interrupted() : ์ฐ๋ ๋์ ์์ ์ ์ทจ์ํ๋ค.
์งํ์ค์ธ ์ฐ๋ ๋์ ์์ ์ด ๋๋๊ธฐ์ ์ ์ทจ์ ์์ผ์ผํ ๋๊ฐ ์๋ค.
์๋ฅผ ๋ค์ด ํฐ ํ์ผ์ ๋ค์ด๋ก๋ ๋ฐ์ ๋ ์๊ฐ์ด ๋๋ฌด ์ค๋๊ฑธ๋ฆฌ๋ฉด ์ค๊ฐ์ ๋ค์ด๋ก๋๋ฅผ ํฌ๊ธฐํ๊ณ ์ทจ์ํ ์ ์์ด์ผ ํ๋ค.
interrrupt()๋ ์ฐ๋ ๋์๊ฒ ์์ ์ ๋ฉ์ถ๋ผ๊ณ ์์ฒญํ๋ค. ๋จ์ง ๋ฉ์ถ๋ผ๊ณ ์์ฒญ๋ง ํ๋ ๊ฒ์ผ ๋ฟ ์ฐ๋ ๋๋ฅผ ๊ฐ์ ๋ก ์ข ๋ฃ์ํค์ง๋ ๋ชปํ๋ค.
interrupted()๋ ์ฐ๋ ๋์ ๋ํด interrupt()๊ฐ ํธ์ถ๋์๋์ง ์๋ ค์ค๋ค. interrupt()๊ฐ ํธ์ถ๋์ง ์์๋ค๋ฉด false๋ฅผ, interrupt()๊ฐ ํธ์ถ๋์๋ค๋ฉด true๋ฅผ ๋ฐํํ๋ค.
์ฐ๋ ๋๊ฐ sleep(), wait(), join()์ ์ํด ์ผ์์ ์ง ์ํ์ ์์ ๋ ํด๋น ์ฐ๋ ๋์ ๋ํด interrupt()๋ฅผ ํธ์ถํ๋ฉด sleep(), wait(), join() ์์ interruptException()์ด ๋ฐ์ํ๊ณ ์ฐ๋ ๋๋ ์คํ๋๊ธฐ ์ํ๋ก ๋ฐ๋๋ค.
-> ์ฆ ๋ฉ์ถฐ์๋ ์ฐ๋ ๋๋ฅผ ๊นจ์์ ์คํ ๊ฐ๋ฅํ ์ํ๋ก ๋ง๋๋ ๊ฒ์ด๋ค.
3๏ธโฃ suspend(), resume(), stop()
suspend()๋ sleep()์ฒ๋ผ ์ฐ๋ ๋๋ฅผ ๋ฉ์ถ๊ฒ ํ๋ค. suspend()์ ์ํด ์ ์ง๋ ์ฐ๋ ๋๋ resume()๋ก ํธ์ถํด์ผ ๋ค์ ์คํ๋๊ธฐ ์ํ๊ฐ ๋๋ค. stop()์ ํธ์ถ๋๋ ์ฆ์ ์ฐ๋ ๋๊ฐ ์ข ๋ฃ๋๋ค.
suspend(), resume(), stop()์ ์ฐ๋ ๋์ ์คํ์ ์ ์ดํ๋ ๊ฐ์ฅ ์์ฌ์ด ๋ฐฉ๋ฒ์ด์ง๋ง, suspend()์ stop()์ด ๊ต์ฐฉ์ํ๋ฅผ ์ผ์ผํค๊ธฐ ์ฝ๊ฒ ์์ฑ๋์ด ์์ผ๋ฏ๋ก ์ฌ์ฉํ๊ธฐ๋ฅผ ๊ถ์ฅํ์ง ์๋๋ค. ๊ทธ๋์ ์ด ๋ฉ์๋๋ค์ deprecated๋์๋ค.
-> sleep()์ ์ฐ๋ ๋๋ฅผ 2์ด ๋ฉ์ถ๊ฒ ํ์ง๋ง, 2์ด ํ์ ๋ฐ๋ก ์คํ์ํ๊ฐ ์๋ ์คํ๋๊ธฐ ์ํ๊ฐ ๋๋ค.
์ฌ๊ธฐ์๋ ๊ฐ๋จํด์ ๊ต์ฐฉ์ํ๊ฐ ์ผ์ด๋ ์ผ์ด ์๊ธฐ ๋๋ฌธ์ suspend()์ stop()์ ์ฌ์ฉํด๋ ๋ณ ๋ฌธ์ ๋ ์์ง๋ง ์ข ๋ ๋ณต์กํ ๊ฒฝ์ฐ์๋ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข๋ค.
-> stoppted(), suspended()๋ผ๋ boolean ํ์ ์ ๋ ๋ณ์๋ฅผ ์ธ์คํด์ค ๋ณ์๋ก ์ ์ธํ๊ณ , ์ด ๋ณ์๋ฅผ ์ฌ์ฉํด์ ๋ฐ๋ณต๋ฌธ๊ณผ ์กฐ๊ฑด๋ฌธ์ ์กฐ๊ฑด์์ ์์ฑํ๋ค.
volatile
๋ฉํฐ ์ฝ์ด ํ๋ก์ธ์์์๋ ์ฝ์ด๋ง๋ค ๋ณ๋์ ์บ์๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ๊ฐ ์๋ค.
์ฝ์ด๋ ๋ฉ๋ชจ๋ฆฌ์์ ์ฝ์ด์จ ๊ฐ์ ์บ์์ ์ ์ฅํ๊ณ , ์บ์์์ ๊ฐ์ ์ฝ์ด์ ์์ ํ๋ค, ๋ค์ ๊ฐ์ ๊ฐ์ ์ฝ์ด์ฌ ๋๋ ๋จผ์ ์บ์์ ์๋์ง ํ์ธํ๊ณ ์์ ๋๋ง ๋ฉ๋ชจ๋ฆฌ์์ ์ฝ์ด์จ๋ค.
๊ทธ๋์ ๋์ค์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๋ณ์์ ๊ฐ์ด ๋ณ๊ฒฝ๋์๋๋ฐ๋ ์บ์์ ์ ์ฅ๋ ๊ฐ์ด ๊ฐฑ์ ๋์ง ์์์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๊ฐ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ค.
volatile์ ๋ถ์ด๋ฉด, ์ฝ์ด๊ฐ ๋ณ์์ ๊ฐ์ ์ฝ์ด์ฌ ๋ ์บ์๊ฐ ์๋ ๋ฉ๋ชจ๋ฆฌ์์ ์ฝ์ด์ค๊ธฐ ๋๋ฌธ์ ์บ์์ ๋ฉ๋ชจ๋ฆฌ๊ฐ์ ๊ฐ์ ๋ถ์ผ์น๊ฐ ํด๊ฒฐ๋๋ค.
4๏ธโฃ yield() : ๋ค๋ฅธ ์ฐ๋ ๋์๊ฒ ์๋ณดํ๋ค.
yeild()๋ ์ฐ๋ ๋ ์์ ์๊ฒ ์ฃผ์ด์ง ์คํ ์๊ฐ์ ๋ค์ ์ฐจ๋ก์ ์ฐ๋ ๋์๊ฒ ์๋ณดํ๋ค.
์๋ฅผ ๋ค์ด ์ค์ผ์ค๋ฌ์ ์ํด 1์ด์ ์คํ ์๊ฐ์ ํ ๋น๋ฐ์ ์ฐ๋ ๋๊ฐ 0.5์ด์ ์๊ฐ๋์ ์์ ์ ํ ์ํ์์ yeild()์ ํธ์ถํ๋ฉด ๋๋จธ์ง 0.5์ด๋ ํฌ๊ธฐํ๊ณ ๋ค์ ์คํ๋๊ธฐ ์ํ๊ฐ ๋๋ค.
yeild()์ interrupt()๋ฅผ ์ ์ ํ๊ฒ ์ฌ์ฉํ๋ฉด ํ๋ก๊ทธ๋จ์ ์๋ต์ฑ์ ๋์ด๊ณ ๋ณด๋ค ํจ์จ์ ์ธ ์คํ์ด ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค.
-> suspended ๊ฐ์ด true๋ผ๋ฉด (์ ์ ์คํ์ ๋ฉ์ถ ์ํ๋ผ๋ฉด) ์ฐ๋ ๋๋ ์ฃผ์ด์ง ์คํ์๊ฐ์ ๊ทธ์ whlie๋ฌธ์ ์๋ฏธ ์์ด ๋๋ฉด์ ๋ญ๋นํ๊ฒ ๋ ๊ฒ์ด๋ค.
์ด๋ฐ ์ํฉ์ '๋ฐ์ ๋๊ธฐ์ํ(busy-waiting)'์ด๋ผ๊ณ ํ๋ค.
๊ทธ๋ฌ๋ yield()๋ฅผ ํธ์ถํด์ ๋จ์ ์คํ์๊ฐ์ while๋ฌธ์์ ๋ญ๋นํ์ง ์๊ณ ๋ค๋ฅธ ์ฐ๋ ๋์๊ฒ ์๋ณดํ๊ฒ ๋๋ฏ๋ก ๋ ํจ์จ์ ์ด๋ค.
๊ทธ๋ฆฌ๊ณ suspend(), stop()์์ interrupt()๋ฅผ ํธ์ถํ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค.
๋ง์ผ stop()์ด ํธ์ถ๋์์ ๋ Thread.sleep(1000)์ ์ํด ์ฐ๋ ๋๊ฐ ์ผ์์ ์ง ์ํ์ ๋จธ๋ฌผ๋ฌ ์๋ ์ํฉ์ด๋ผ๋ฉด, stopped์ ๊ฐ์ด true๋ก ๋ฐ๋์์ด๋ ์ฐ๋ ๋๊ฐ ์ ์ง๋ ๋ ๊น์ง ์ต๋ 1์ด ์๊ฐ ์ง์ฐ์ด ์๊ธธ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ ๊ฐ์ ์ํฉ์์ interrupt()๋ฅผ ํธ์ถํ๋ฉด sleep()์์ InterruptedException์ด ๋ฐ์ํด์ ์ฆ์ ์ผ์์ ์ง ์ํ์์ ๋ฒ์ด๋๊ฒ ๋๋ฏ๋ก ์๋ต์ฑ์ด ์ข์์ง๋ค.
5๏ธโฃ join() - ๋ค๋ฅธ ์ฐ๋ ๋์ ์์ ์ ๊ธฐ๋ค๋ฆฐ๋ค.
์ฐ๋ ๋ ์์ ์ด ํ๋ ์์ ์ ์ ์ ๋ฉ์ถ๊ณ ๋ค๋ฅธ ์ฐ๋ ๋๊ฐ ์ง์ ๋ ์๊ฐ๋์ ์์ ์ ์ํํ๋๋ก ํ ๋ Join()์ ์ฌ์ฉํ๋ค.
์๊ฐ์ ์ง์ ํ์ง ์์ผ๋ฉด ํด๋น ์ฐ๋ ๋๊ฐ ์์ ์ ๋ชจ๋ ๋ง์น ๋ ๊น์ง ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋ค.
์์ ์ค์ ๋ค๋ฅธ ์ฐ๋ ๋์ ์์ ์ด ๋จผ์ ์ํ๋์ด์ผ ํ ํ์๊ฐ ์์ ๋ join()์ ์ฌ์ฉํ๋ค.
join()๋ sleep()์ฒ๋ผ interrupt()์ ์ํด ๋๊ธฐ์ํ์์ ๋ฒ์ด๋ ์ ์์ผ๋ฉฐ, join()์ด ํธ์ถ๋๋ ๋ถ๋ถ์ try-catch๋ฌธ์ผ๋ก ๊ฐ์ธ์ผ ํ๋ค.
join()์ ์ฌ์ฉํ์ง ์์์ผ๋ฉด main ์ฐ๋ ๋๋ ๋ฐ๋ก ์ข ๋ฃ๋์๊ฒ ์ง๋ง, join()์ผ๋ก ์ฐ๋ ๋ th1์ th2์ ์์ ์ ๋ง์น ๋ ๊น์ง main ์ฐ๋ ๋๊ฐ ๊ธฐ๋ค๋ฆฌ๋๋ก ํ๋ค.
๊ทธ๋์ main ์ฐ๋ ๋๊ฐ ๋ ์ฐ๋ ๋์ ์์ ์ ์์๋ ์๊ฐ์ ์ถ๋ ฅํ ์ ์๋ค.
6๏ธโฃ ์ฐ๋ ๋์ ๋๊ธฐํ
์ฑ๊ธ์ฐ๋ ๋ ํ๋ก์ธ์ค์ ๊ฒฝ์ฐ์๋ ํ๋ก์ธ์ค ๋ด์์ ๋จ ํ๋์ ์ฐ๋ ๋๋ง ์์ ํ๊ธฐ ๋๋ฌธ์ ํ๋ก์ธ์ค์ ์์์ ๊ฐ์ง๊ณ ์์ ํ๋๋ฐ ๋ณ ๋ฌธ์ ๊ฐ ์์ง๋ง, ๋ฉํฐ์ฐ๋ ๋ ํ๋ก์ธ์ค์ ๊ฒฝ์ฐ ์ฌ๋ฌ ์ฐ๋ ๋๊ฐ ๊ฐ์ ํ๋ก์ธ์ค ๋ด์ ์์ ์ ๊ณต์ ํด์ ์์ ํ๊ธฐ ๋๋ฌธ์ ์๋ก์ ์์ ์ ์ํฅ์ ์ฃผ๊ฒ ๋๋ค.
๋ง์ผ ์ฐ๋ ๋A๊ฐ ์์ ํ๋ ๋์ค์ ๋ค๋ฅธ ์ฐ๋ ๋B์๊ฒ ์ ์ด๊ถ์ด ๋์ด๊ฐ์ ๋, ์ฐ๋ ๋A๊ฐ ์์ ํ๋ ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๋ ๋B๊ฐ ์์๋ก ๋ณ๊ฒฝํ์๋ค๋ฉด, ๋ค์ ์ฐ๋ ๋A๊ฐ ์ ์ด๊ถ์ ๋ฐ์์ ๋๋จธ์ง ์์ ์ ๋ง์ณค์ ๋ ์๋ ์๋ํ๋ ๊ฒ๊ณผ๋ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
์ด๋ฌํ ์ผ์ด ๋ฐ์ํ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด์ ํ ์ฐ๋ ๋๊ฐ ํน์ ์์ ์ ๋๋ง์น๊ธฐ ์ ๊น์ง ๋ค๋ฅธ ์ฐ๋ ๋์ ์ํด ๋ฐฉํด๋ฐ์ง ์๋๋ก ํ๋ ๊ฒ์ด ํ์ํ๋ค.
๊ทธ๋์ ๋์ ๋ ๊ฐ๋ ์ด ์๊ณ์์ญcritical section)๊ณผ ์ ๊ธ(lock)์ด๋ค.
๊ณต์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋ ์์ญ์ ์๊ณ ์์ญ์ผ๋ก ์ง์ ํด๋๊ณ , ๊ณต์ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ง๊ณ ์๋ lock์ ํ๋ํ ๋จ ํ๋์ ์ฐ๋ ๋๋ง ์ด ์์ญ ๋ด์์ฝ๋๋ฅผ ์ํํ ์ ์๊ฒ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋น ์ฐ๋ ๋๊ฐ ์๊ณ์์ญ๋ด์ ๋ชจ๋ ์ฝ๋๋ฅผ ์ํํ๊ณ ๋ฒ์ด๋์ lock์ ๋ฐ๋ฉํด์ผ๋ง ๋ค๋ฅธ ์ฐ๋ ๋๊ฐ ๋ฐ๋ฉ๋ lock์ ํ๋ํด์ ์๊ณ์์ญ์ ์ฝ๋๋ฅผ ์ํํ ์ ์๊ฒ ๋๋ค.
์ด์ฒ๋ผ ํ ์ฐ๋ ๋๊ฐ ์งํ ์ค์ธ ์์ ์ ๋ค๋ฅธ ์ฐ๋ ๋๊ฐ ๊ฐ์ญํ์ง ๋ชปํ๋๋ก ๋ง๋ ๊ฒ์ ์ฐ๋ ๋์ ๋๊ธฐํ๋ผ๊ณ ํ๋ค.
๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ผ๋ก๋ synchronized ํค์๋๋ฅผ ์ฌ์ฉํด์ ๋๊ธฐํ๋ฅผ ํ๋ค.
- ๋ฉ์๋์ synchronized๋ฅผ ๋ถ์ด๋ฉด ๋ฉ์๋ ์ ์ฒด๊ฐ ์๊ณ์์ญ์ผ๋ก ์ค์ ๋๋ค.
์ฐ๋ ๋๋ synchronized ๋ฉ์๋๊ฐ ํธ์ถ๋ ์์ ๋ถํฐ ํด๋น ๋ฉ์๋๊ฐ ํฌํจ๋ ๊ฐ์ฒด์ lock์ ์ป์ด ์์ ์ ์ํํ๋ค๊ฐ ๋ฉ์๋๊ฐ ์ข ๋ฃ๋๋ฉด Lock์ ๋ฐํํ๋ค.
- ๋ฉ์๋ ๋ด์ ์ฝ๋ ์ผ๋ถ๋ฅผ ๋ธ๋ญ์ผ๋ก ๊ฐ์ธ๊ณ synchronized ๋ฅผ ๋ถ์ด๋ฉด ์ด ๋ธ๋ญ ์์ญ์์ผ๋ก ๋ค์ด๊ฐ๋ฉด์๋ถํฐ ์ฐ๋ ๋๋ ์ง์ ๋ ๊ฐ์ฒด์ lock์ ์ป๊ฒ ๋๊ณ , ์ด ๋ธ๋ญ์ ๋ฒ์ด๋๋ฉด lock์ ๋ฐ๋ฉํ๋ค.
์๊ณ์์ญ์ ๋ฉํฐ์ฐ๋ ๋ ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ ์ข์ฐํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ฉด ๋ฉ์๋ ์ ์ฒด์ ๋ฝ์ ๊ฑฐ๋ ๊ฒ ๋ณด๋ค๋ synchonized๋ธ๋ญ์ผ๋ก ์๊ณ ์์ญ์ ์ต์ํํด์ ๋ณด๋ค ํจ์จ์ ์ธ ํ๋ก๊ทธ๋จ์ด ๋๋๋ก ๋ ธ๋ ฅํด์ผ ํ๋ค.
-> ์ฌ๊ธฐ์ ๋ณด๋ฉด ์คํ ๊ฒฐ๊ณผ๊ฐ balance๊ฐ ์์์ธ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ด์ ๋ ํ ์ฐ๋ ๋๊ฐ if๋ฌธ์ ์กฐ๊ฑด์์ ํต๊ณผํ๊ณ ์ถ๊ธํ๊ธฐ ๋ฐ๋ก ์ง์ ์ ๋ค๋ฅธ ์ฐ๋ ๋๊ฐ ๋ผ์ด๋ค์ด ์ถ๊ธ์ ๋จผ์ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์๋ฅผ ๋ค์ด ํ ์ฐ๋ ๋๊ฐ if๋ฌธ์ ์กฐ๊ฑด์์ ๊ณ์ฐํ์ ๋๋ ์๊ณ ๊ฐ 200์ด๊ณ ์ถ๊ธํ๋ ค๋ ๊ธ์ก์ด 100์ด๋ผ์ ์กฐ๊ฑด์์ด true๊ฐ ๋์ด์ ์ถ๊ธ์ ์ํํ๋ ค๋ ์๊ฐ ๋ค๋ฅธ ์ฐ๋ ๋์๊ฒ ์ ์ด๊ถ์ด ๋ใ ์ด๊ฐ์ ๋ค๋ฅธ ์ฐ๋ ๋๊ฐ 200์ ์ถ๊ธํด์ ์๊ณ ๊ฐ 0์ด ๋์๋ค.
๊ทผ๋ฐ ๋ค์ ์ด์ ์ ์ฐ๋ ๋๋ก ์ ์ด๊ถ์ด ๋์ด์ค๋ฉด if๋ฌธ ๋ค์๋ถํฐ ์ํํ๊ฒ ๋๋ก ์๊ณ ๊ฐ 0์ธ ์ํ์์ 100์ ์ถ๊ธํ์ฌ ์๊ณ ๊ฐ ๊ฒฐ๊ตญ -100์ด ๋๋ค. ๊ทธ๋์ ์๊ณ ๋ฅผ ํ์ธํ๋ If๋ฌธ๊ณผ ์ถ๊ธํ๋ ๋ฌธ์ฅ์ ํ๋์ ์๊ณ์์ญ์ผ๋ก ๋ฌถ์ด์ ธ์ผ ํ๋ค.
-> ์ด์ ์์ ์์ whthdraw()์ synchronized๋ฅผ ๋ถ์ด๊ธฐ๋ง ํ๋๋ฐ ์ ๊ณผ ๋ฌ๋ฆฌ ๊ฒฐ๊ณผ์ ์์๊ฐ์ด ๋ํ๋์ง ์๋๋ค.
์ฌ๊ธฐ์ balance์ ์ ๊ทผ ์ ์ด์๊ฐ private ์ฌ์ผ ํ๋ค. ์๋ํ๋ฉด private๊ฐ ์๋๋ผ๋ฉด ์ธ๋ถ์์ ์ง์ ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ฌด๋ฆฌ ๋๊ธฐํ๋ฅผ ํด๋ ์ด ๊ฐ์ ๋ณ๊ฒฝ์ ๋ง์ ๊ธธ์ด ์๋ค.
7๏ธโฃ wait()๊ณผ notify()
synchronized๋ก ๋๊ธฐํํด์ ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๋ ๊ฒ ๊น์ง๋ ๊ด์ฐฎ์๋ฐ, ํน์ ์ฐ๋ ๋๊ฐ ๊ฐ์ฒด์ ๋ฝ์ ๊ฐ์ง ์ํ๋ก ์ค๋ ์๊ฐ ๋ณด๋ด์ง ์๋๋ก ํ๋ ๊ฒ๋ ์ค์ํ๋ค.
๋ง์ผ ๊ณ์ข์ ์ถ๊ธํ ๋์ด ๋ถ์กฑํด์ ํ ์ฐ๋ ๋๊ฐ ๋ฝ์ ๋ณด์ ํ ์ฑ๋ก ๋์ด ์ ๊ธ๋ ๋ ๊น์ง ์ค๋ ์๊ฐ์ ๋ณด๋ธ๋ค๋ฉด, ๋ค๋ฅธ ์ฐ๋ ๋๋ค์ ๋ชจ๋ ํด๋น ๊ฐ์ฒด์ ๋ฝ์ ๊ธฐ๋ค๋ฆฌ๋๋ผ ๋ค๋ฅธ ์์ ๋ค๋ ์ํ ํ ์งํ๋์ง ์์ ๊ฒ์ด๋ค.
์ด๋ฌํ ์ํฉ์ ๊ฐ์ ํ๊ธฐ ์ํด ๊ณ ์๋ ๊ฒ์ด ๋ฐ๋ก wait()๊ณผ notify()์ด๋ค.
๋๊ธฐํ๋ ์๊ณ ์์ญ์ ์ฝ๋๋ฅผ ์ํํ๋ค๊ฐ ์์ ์ ๋ ์ด์ ์งํํ ์ํฉ์ด ์๋๋ฉด ์ผ๋จ wait()์ ํธ์ถํ์ฌ ์ฐ๋ ๋๊ฐ ๋ฝ์ ๋ฐ๋ฉํ๊ณ ๊ธฐ๋ค๋ฆฌ๊ฒ ํ๋ค.
๊ทธ๋ฌ๋ฉด ๋ค๋ฅธ ์ฐ๋ ๋๊ฐ ๋ฝ์ ์ป์ด ํด๋น ๊ฐ์ฒด์ ๋ํ ์์ ์ ์ํํ ์ ์๊ฒ ๋๋ค.
๋์ค์ ์์ ์ ์งํํ ์ ์๋ ์ํฉ์ด ๋๋ฉด notify()๋ฅผ ํธ์ถํด์ ์์ ์ ์ค๋จํ๋ ์ฐ๋ ๋๊ฐ ๋ค์ ๋ฝ์ ์ป์ด ์์ ์ ์งํํ ์ ์๊ฒ ํ๋ค.
wait()์ด ํธ์ถ๋๋ฉด ์คํ์ค์ด๋ ์ฐ๋ ๋๋ ํด๋น ๊ฐ์ฒด์ waiting pool์์ ํต์ง๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค.
notify()๊ฐ ํธ์ถ๋๋ฉด ํด๋น ๊ฐ์ฒด์ ๋๊ธฐ์ค์ ์๋ ๋ชจ๋ ์ฐ๋ ๋์๊ฒ ํต๋ณด๋ฅผ ํ์ง๋ง, ๊ทธ๋๋ lock์ ์ป์ ์ ์๋ ๊ฒ์ ํ๋์ ์ฐ๋ ๋์ผ ๋ฟ์ด๊ณ , ๋๋จธ์ง ์ฐ๋ ๋๋ ํต๋ณด๋ฅผ ๋ฐ๊ธด ํ์ง๋ง, lock์ ์ป์ง ๋ชปํ๋ฉด ๋ค์ lock์ ๊ธฐ๋ค๋ฆฌ๋ ์ ์ธ๊ฐ ๋๋ค.
๊ธฐ์ ํ์๊ณผ ๊ฒฝ์ ์ํ
์ง๋ ํ ์ด์ด ๋์๋ฉด ์ฐ๋ ๋๋ ๊ณ์ ํต๋ณด๋ฅผ ๋ฐ์ง ๋ชปํ๊ณ ์ค๋ซ๋์ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋๋ฐ ์ด๋ฐ ํ์์ ๊ธฐ์ ํ์(starvation)์ด๋ผ๊ณ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ๋ฌ ์ฐ๋ ๋๊ฐ lock์ ์ป๊ธฐ ์ํด์ ์๋ก ๊ฒฝ์ํ๋ ๊ฒ์ ๊ฒฝ์์ํ(race condition)์ด๋ผ๊ณ ํ๋๋ฐ ์ด ๊ฒฝ์ ์ํ๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด์๋ ์ฐ๋ ๋๋ฅผ ๊ตฌ๋ณํด์ ํต์งํ๋ ๊ฒ์ด ํ์ํ๋ค.