Search

Thread

ํƒœ๊ทธ
Thread
์ž๋ฐ”
๋ฉ€ํ‹ฐ์บ ํผ์Šค
ํŒŒ์ผ
thread.pdf
Thread
์‹คํ–‰, ์‹คํ–‰๋Œ€๊ธฐ, ์ผ์‹œ์ •์ง€, ์ค‘์ง€
โ€ข
์‹คํ–‰ : thread ๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ์ƒํƒœ
โ€ข
์‹คํ–‰๋Œ€๊ธฐ : thread ๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์•„์ง ์Šค์ผ€์ฅด๋ง์ด ๋˜์ง€ ์•Š์•„์„œ ์‹คํ–‰์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ
โ€ข
์ผ์‹œ์ •์ง€ : thread ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ
โ—ฆ
waiting
โ–ช
Thread.join(), Object.wait()
โ–ช
๋ฉ”์„œ๋“œ์— ์˜ํ•ด ๋ฉˆ์ถฐ์ง„ ์ƒํƒœ
โ—ฆ
timed wating
โ–ช
sleep(miliSeconds)
โ–ช
์ง€์ •๋œ ์‹œ๊ฐ„๋™์•ˆ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ผ์‹œ์ •์ง€ ๋˜์–ด์ง„ ์ƒํƒœ
โ—ฆ
Blocked
โ–ช
๊ณต์œ ์ž์›์— Lock ์ด ๊ฑธ๋ ค ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ
โ€ข
์ค‘์ง€ : thread ๊ฐ€ ์ž‘์—…์„ ๋งˆ์น˜๊ณ  ์ค‘์ง€๋œ ์ƒํƒœ
thread ๋ฅผ ์ œ์–ดํ•˜๋Š” ๋ฉ”์„œ๋“œ
โ€ข
start() : ์“ฐ๋ž˜๋“œ๋ฅผ ์‹คํ–‰๋Œ€๊ธฐ ์ƒํƒœ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.
โ€ข
yield() : ์‹คํ–‰์ค‘์ธ ์“ฐ๋ž˜๋“œ๋ฅผ ์‹คํ–‰๋Œ€๊ธฐ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.(์–‘๋ณด)
โ€ข
sleep() : ์ง€์ •๋œ ์‹œ๊ฐ„๋™์•ˆ ์“ฐ๋ž˜๋“œ๋ฅผ ์ผ์‹œ์ •์ง€
โ€ข
join() : ์“ฐ๋ž˜๋“œ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ๊นŒ์ง€ ํ•ด๋‹น ์“ฐ๋ž˜๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ์“ฐ๋ž˜๋“œ๋ฅผ ์ผ์‹œ์ •์ง€์ƒํƒœ๋กœ ๋ณ€๊ฒฝ
โ€ข
interrupt() : join() ๋˜๋Š” sleep() ์— ์˜ํ•ด ์ผ์‹œ์ •์ง€ ์ƒํƒœ๊ฐ€ ๋œ ์“ฐ๋ž˜๋“œ๋ฅผ ์‹คํ–‰๋Œ€๊ธฐ๋กœ ๋ณ€๊ฒฝ
โ€ข
Object.wait() : ์“ฐ๋ž˜๋“œ๋ฅผ ์ผ์‹œ์ •์ง€
โ€ข
Object.notify() : Object.wait()์— ์˜ํ•ด์„œ ์ผ์‹œ์ •์ง€๋œ ์“ฐ๋ž˜๋“œ๋ฅผ ์‹คํ–‰๋Œ€๊ธฐ๋กœ ๋ณ€๊ฒฝ
์˜์—ญ
โ€ข
static, heap์˜์—ญ์€ ๋ชจ๋“  thread๊ฐ€ ๊ณต์œ ํ•˜๋Š” ์˜์—ญ์ด๋‹ค. -> ๊ณต์œ ์ž์›
โ€ข
๋ฉ€ํ‹ฐ์“ฐ๋ž˜๋“œ ์ƒํ™ฉ์—์„œ ํ•˜๋‚˜์˜ ์ž์›์„ ๋‘๊ณ  ์—ฌ๋Ÿฌ ์“ฐ๋ž˜๋“œ๊ฐ€ ๊ฒฝ์Ÿํ•˜๋Š” ๊ฒฝ์Ÿ์ƒํƒœ(race condition)๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
โ—ฆ
์ž„๊ณ„์˜์—ญ
โ–ช
์ฝ”๋“œ ๋ธ”๋ก ๋‚ด์—์„œ ๊ณต์œ ์ž์›์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด ๋‘˜ ์ด์ƒ์˜ ์“ฐ๋ž˜๋“œ๊ฐ€ ํ•ด๋‹น ์ฝ”๋“œ๋ธ”๋ก์„ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ ๊ฒฝ์Ÿ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ธ”๋ก
โ–ช
์ž„๊ณ„์˜์—ญ์— ๋™๊ธฐํ™”๋ฅผ ํ†ตํ•ด ์ž‘์—…์˜ ์ˆœ์„œ๋ฅผ ์ง€์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.
โ€ข
๋™๊ธฐํ™” : ๋‘ ์ž‘์—…์ด ์žˆ์„ ๋•Œ A๋ผ๋Š” ์ž‘์—…์ด ๋๋‚˜๋Š” ์‹œ์ ๊ณผ B๋ผ๋Š” ์ž‘์—…์ด ์‹œ์ž‘๋˜๋Š” ์‹œ์ ์ด ์ผ์น˜ํ•˜๋Š” ๊ฒƒ
synchronized ์˜ˆ์•ฝ์–ด
โ€ข
๋ฉ”์„œ๋“œ ์„ ์–ธ๋ถ€, ๋˜๋Š” synchronized ๋ธ”๋ก์„ ์ง€์ •
โ€ข
๋ฉ”์„œ๋“œ ์„ ์–ธ๋ถ€์— synchronized๋ฅผ ์„ ์–ธํ•  ๊ฒฝ์šฐ, ๋ฉ”์„œ๋“œ์˜ ์ฝ”๋“œ๋ธ”๋ก(๋ฉ”์„œ๋“œ ๋ฐ”๋””) ์ „์ฒด๊ฐ€ ๋™๊ธฐํ™”
โ€ข
ํŠน์ • ์“ฐ๋ž˜๋“œ๊ฐ€ synchronized ๋ธ”๋ก, ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ์“ฐ๋ž˜๋“œ๋“ค์€ synchronized ๋ธ”๋ก, ๋ฉ”์„œ๋“œ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค. (๊ฐ์ฒด์— lock์„ ๊ฑด๋‹ค.)