MapleStory Cookie With Halo

โ˜• JAVA/โ˜• Class & Method

[JAVA][Thread]wait() & notify()

๋‰ด์ด NUEY 2024. 12. 10. 17:32
๋ฐ˜์‘ํ˜•

 

๐Ÿ’ก wait() & notify()
 ๋™๊ธฐํ™”์˜ ๋‹จ์ ์ธ ๋น„ํšจ์œจ์„ฑ(ํ•œ๋ฒˆ์— ํ•œ๊ฐœ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ์—)์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.
Objectํด๋ž˜์Šค์— ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋™๊ธฐํ™” ๋ธ”๋ก ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

2024.12.09 - [โ˜• ์ž๋ฐ” JAVA/โ˜• ํด๋ž˜์Šค์™€ ํ•จ์ˆ˜ Class & Method] - [JAVA][Thread]๋™๊ธฐํ™” synchronization

  • wait()
    • ๊ฐ์ฒด์˜ lock์„ ํ’€๊ณ , ์“ฐ๋ ˆ๋“œ๋ฅผ ํ•ด๋‹น ๊ฐ์ฒด์˜ waiting pool์— ๋„ฃ๋Š”๋‹ค.

  • notify()
    • waiting pool์—์„œ ๋Œ€๊ธฐ์ค‘์ธ ์“ฐ๋ ˆ๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊นจ์šด๋‹ค.

  • notifyAll()
    • waiting pool์—์„œ ๋Œ€๊ธฐ์ค‘์ธ ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๋ฅผ ๊นจ์šด๋‹ค.
    • ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” notify()๋ณด๋‹ค notifyAll()์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 


์˜ˆ์ œ

์˜ˆ์‹œ์ฝ”๋“œ๊ฐ€ ์ด๋ ‡๊ฒŒ ์žˆ์„ ๋•Œ(๊ฐ•์˜์—์„œ ์•ˆ ๋ณด์ด๋Š” ๋‚ด์šฉ์€ ์ž„์˜๋กœ ์ถ”๊ฐ€๋กœ ์ ์—ˆ์–ด์š”)
wait() & notify()๊ฐ€ ์—†์œผ๋ฉด ํŠน์ •์“ฐ๋ ˆ๋“œ๊ฐ€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ๊ธธ์–ด์ ธ ํšจ์œจ์ด ์•ˆ ์ข‹์Šต๋‹ˆ๋‹ค.
wait() & notify()๋ฅผ ์ถ”๊ฐ€ํ•œ ํ›„. ํŠน์ • ์“ฐ๋ ˆ๋“œ์—์„œ ์ž‘์—…์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

๋‚ด์šฉ์ด ์–ด๋ ค์› ๋Š”๋ฐ notify()๊ฐ€ ๋Œ€๊ธฐ์ค‘์ธ ์“ฐ๋ ˆ๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊นจ์šฐ๋Š” ๊ฒƒ์ด๋ผ๋Š” ๊ฑธ ๋– ์˜ฌ๋ฆฌ๋‹ˆ ์ดํ•ด๊ฐ€ ์‰ฌ์› ์Šต๋‹ˆ๋‹ค.
ํ…Œ์ด๋ธ”์—์„œ ์Œ์‹์„ ์ถ”๊ฐ€ํ•  ๋•Œ while (dishes.size() >= MAX_FOOD) { ํ…Œ์ด๋ธ”์ด ๊ฝ‰ ์ฐจ๋ฉด ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
ํ…Œ์ด๋ธ”์—์„œ ์Œ์‹์„ ์น˜์šฐ๋ คํ•˜๋Š”๋ฐ while (dishes.size() == 0) { ์ ‘์‹œ๊ฐ€ ์—†์œผ๋ฉด ๋˜ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
ํ•œ๋งˆ๋””๋กœ ์ง€๊ธˆ ์‹คํ–‰์ค‘์ธ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋Œ€๊ธฐ ์‹œํ‚ค๊ณ  ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๋“ค ์ค‘ ์•„๋ฌด๋‚˜ ์ผํ•˜๋ผ๋ฉด์„œ ์ „๋‹ฌ์— ์ „๋‹ฌ์„ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 


์ฐธ์กฐ์˜์ƒ

๋ฐ˜์‘ํ˜•