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์ ๊ฑด๋ค.)