[Java] wait์™€ notify๋ฉ”์„œ๋“œ

Java Thread wait() , notify(), notifyAll() ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.

์“ฐ๋ ˆ๋“œ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์•„๋‹Œ, ์ž๋ฐ” ์ตœ์ƒ์œ„ ํด๋ž˜์Šค์ธ Object ํด๋ž˜์Šค์˜ ์กด์žฌํ•˜๋Š” ๋ฉ”์„œ๋“œ.

๋ฉ”์„œ๋“œ ๊ธฐ๋Šฅ ๋น„๊ณ 
wait lock๋ฅผ ์†Œ์œ ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž์‹ ์˜ ์ œ์–ด๊ถŒ์„ ์–‘๋ณดํ•˜๊ณ  WAITING ๋˜๋Š” TIMED_WAITING์ƒํƒœ์—์„œ ๋Œ€๊ธฐ ํ˜ธ์ถœํ•˜๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ๊ณ ์œ  ๋ฝ์„ ๊ฐ–๊ณ ์žˆ๋‹ค์•ผ ํ•œ๋‹ค.
notify WAIT ์ƒํƒœ์— ๋น ์ ธ์žˆ๋Š” ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋ฅผ ๋‹ค์‹œ RUNNABLE ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ์‹œํ‚ค๋Š” ์—ญํ•  ํ˜ธ์ถœํ•˜๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ๊ณ ์œ  ๋ฝ์„ ๊ฐ–๊ณ ์žˆ๋‹ค์•ผ ํ•œ๋‹ค.
notifyAll ์ž ๋“ค์–ด ์žˆ๋˜ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๋ฅผ ๊นจ์šด๋‹ค ํ˜ธ์ถœํ•˜๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ๊ณ ์œ  ๋ฝ์„ ๊ฐ–๊ณ ์žˆ๋‹ค์•ผ ํ•œ๋‹ค.

ํ˜ธ์ถœํ•˜๋Š” ์ชฝ ์Šค๋ ˆ๋“œ๊ฐ€ synchronized ๋ธ”๋ก๋‚ด์—์„œ ์‹คํ–‰(๊ณ ์œ ๋ฝ์„ ํš๋“ํ•œ) ๋˜์ง€ ์•Š์œผ๋ฉด IllegalMonitorStateException ์ด ๋ฐœ์ƒํ•œ๋‹ค.์ž ๋“  ์Šค๋ ˆ๋“œ ํ•˜๋‚˜๋งŒ ๊นจ์šฐ๋„๋ก ์ œ์–ดํ•˜๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ๋ณดํ†ต์€ notifyAll()์„ ์‚ฌ์šฉํ•ด์„œ ๋ชจ๋‘ ๊นจ์šฐ๊ณ , ๊นจ์–ด๋‚œ ์Šค๋ ˆ๋“œ๋“ค์€ ๋ฝ์„ ํš๋“ํ•˜๊ธฐ ์œ„ํ•ด ๊ฒฝ์Ÿํ•œ๋‹ค. ๋ฝ์„ ํš๋“ํ•œ ์Šค๋ ˆ๋“œ๋งŒ์ด wait()ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ด์‹œํ‚ค๊ณ  ๊ทธ ๋‹ค์Œ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์—ฐ๊ด€ ํฌ์ŠคํŠธ