[JAVA] 21. ์“ฐ๋ ˆ๋“œ ์‹คํ–‰ ์ œ์–ด ๋ฉ”์„œ๋“œ(sleep ,interrupt, stop, suspend, resume, join, yield)

2022. 5. 29. 19:02ใ†JAVA/์ž๋ฐ”์˜ ์ •์„

728x90

https://hyejin.tistory.com/594

 

[JAVA] 20. ์“ฐ๋ ˆ๋“œ Thread

1๏ธโƒฃ ํ”„๋กœ์„ธ์Šค์™€ ์“ฐ๋ ˆ๋“œ ํ”„๋กœ์„ธ์Šค Process๋ž€ '์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ'์ด๋‹ค. ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด os ๋กœ๋ถ€ํ„ฐ ์‹คํ–‰์— ํ•„์š”ํ•œ ์ž์›(๋ฉ”๋ชจ๋ฆฌ)๋ฅผ ํ• ๋‹น๋ฐ›์•„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋œ๋‹ค. ํ”„๋กœ์„ธ์Šค๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜ํ–‰ํ•˜

hyejin.tistory.com

 

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)์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ ์ด ๊ฒฝ์Ÿ ์ƒํƒœ๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์“ฐ๋ ˆ๋“œ๋ฅผ ๊ตฌ๋ณ„ํ•ด์„œ ํ†ต์ง€ํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90