-
Java์ ์ค๋ ๋๋ ๋ฌด์์ ๋๊น?
์ค๋ ๋๋ ๋
๋ฆฝ์ ์ธ ์คํ ๊ฒฝ๋ก์
๋๋ค. ๊ทธ ๋ชฉํ๋ ์์คํ
์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ค์ค ํ๋ก์ธ์๋ฅผ ํ์ฉํ๋ ๊ฒ์
๋๋ค. ๋ค์ค ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ฉด CPU ๋ฐ์ธ๋ฉ๋ ์์
์๋๋ฅผ ๋์ผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํ๋์ ์ค๋ ๋๊ฐ ์์
์ ์๋ฃํ๋ ๋ฐ 100๋ฐ๋ฆฌ์ด๊ฐ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ 10๊ฐ์ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ์์
์ 10๋ฐ๋ฆฌ์ด๋ก ์ค์ผ ์ ์์ต๋๋ค. Java๋ ์ธ์ด ์์ค์์ ๋ฉํฐ์ค๋ ๋ฉ์ ๋ํ ๋ฐ์ด๋ ์ง์์ ์ ๊ณตํ๋ฉฐ ์ด๋ Java์ ๊ฐ์ฅ ๊ฐ๋ ฅํ ์ฅ์ ์ค ํ๋์
๋๋ค.
-
Java์ ์ค๋ ๋์ ํ๋ก์ธ์ค์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น?
์ค๋ ๋๋ ํ๋ก์ธ์ค์ ํ์ ์งํฉ์
๋๋ค. ์ฆ, ํ๋์ ํ๋ก์ธ์ค์ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค. ๋ ํ๋ก์ธ์ค๋ ์๋ก ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์์ ์คํ๋์ง๋ง ๋ชจ๋ ์ค๋ ๋๋ ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ณต์ ํฉ๋๋ค. ์ด๊ฒ์ ์ค๋ ๋๋ง๋ค ๋ค๋ฅด๋ฉฐ ํด๋น ์ค๋ ๋์ ๋ก์ปฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์คํ ๋ฉ๋ชจ๋ฆฌ์ ํผ๋ํ์ง ๋ง์ญ์์ค.
-
์ค๋ ๋๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
์ธ์ด ์์ค์์๋ ์ค๋ ๋๋ฅผ ๋ง๋๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. java.lang.Thread ํด๋์ค์ ๊ฐ์ฒด๋ ์ค๋ ๋๋ฅผ ๋ํ๋ด์ง๋ง ์คํํ๋ ค๋ฉด java.lang.Runnable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฒด์ธ ์์
์ด ํ์ํฉ๋๋ค. Thread ํด๋์ค๋ Runnable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ฏ๋ก Thread์์ ํด๋์ค๋ฅผ ํ์์ํค๊ฑฐ๋ ๊ทธ ์์ Runnable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ run() ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ ์ ์์ต๋๋ค.
-
์ธ์ Runnable์ ์ฌ์ฉํ๊ณ ์ธ์ Thread๋ฅผ ์ฌ์ฉํฉ๋๊น?
์ด๊ฒ์ ์ด์ ์ง๋ฌธ์ ๋ํ ์ถ๊ฐ ๋ด์ฉ์
๋๋ค. ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ฏ์ด ์ค๋ ๋๋ Thread ํด๋์ค์์ ์์ํ๊ฑฐ๋ Runnable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ค ๋ฐฉ๋ฒ์ด ๋ ์ข๊ณ ์ธ์ ์ด๋ค ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ ํ๋์ง์ ๋ํ ์ง๋ฌธ์ด ์๊น๋๋ค. Java๊ฐ ๋ค์ค ํด๋์ค ์์์ ์ง์ํ์ง ์์ง๋ง ๋ค์ค ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์๋ค๋ฉด ์ด ์ง๋ฌธ์ ์ฝ๊ฒ ๋๋ตํ ์ ์์ต๋๋ค. ์ฆ, ๋ค๋ฅธ ํด๋์ค์์ ์์ํ๋ ค๋ฉด Runnable์ ๊ตฌํํ๋ ๊ฒ์ด ๋ ์ข์ต๋๋ค.
-
start()์ run() ๋ฉ์๋์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น?
๊ณผ๊ฑฐ์ ํธ๋ฆญ ์ง๋ฌธ ์ค ํ๋์ด์ง๋ง Java์ ๋ฉํฐ์ค๋ ๋ฉ์ ๋ํ ํผ์์ ์ธ ์ดํด๋ฅผ ๊ตฌ๋ณํ๋ ๋ฐ๋ ์ฌ์ ํ ์ถฉ๋ถํฉ๋๋ค. start() ๋ฉ์๋๋ ์๋ก์ด ์ค๋ ๋๋ฅผ ์์ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. start()๊ฐ ๋ด๋ถ์ ์ผ๋ก run() ๋ฉ์๋๋ฅผ ํธ์ถํ๋๋ผ๋ ๋จ์ํ run()์ ํธ์ถํ๋ ๊ฒ๊ณผ๋ ๋ค๋ฆ
๋๋ค. run()์ ์ผ๋ฐ ๋ฉ์๋๋ก ํธ์ถํ๋ฉด ๋์ผํ ์ค๋ ๋์์ ํธ์ถ๋๋ฉฐ ์ ์ค๋ ๋๊ฐ ์์๋์ง ์์ต๋๋ค. ์ด๋ start() ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ๋ฐ์ํฉ๋๋ค.
-
์คํ ๊ฐ๋ฅ๊ณผ ํธ์ถ ๊ฐ๋ฅ์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น?
๋ ์ธํฐํ์ด์ค ๋ชจ๋ ๋ณ๋์ ์ค๋ ๋์์ ์คํ๋๋๋ก ๊ณ ์๋ ์์
์ ๋ํ๋
๋๋ค. Runnable์ JDK 1.0๋ถํฐ ์์๊ณ Callable์ JDK 1.5์ ์ถ๊ฐ๋์์ต๋๋ค. ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ Callable์ call() ๋ฉ์๋๊ฐ ๊ฐ์ ๋ฐํํ๊ณ ์์ธ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ค๋ ์ ์ธ๋ฐ, ์ด๋ Runnable์ run() ๋ฉ์๋์์๋ ๊ฐ๋ฅํ์ง ์์ต๋๋ค. Callable์ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ํฌํจํ ์ ์๋ Future ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.
-
CyclicBarrier์ CountDownLatch์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น?
๋ ๋๊ธฐํ ์ฅ์น ๋ชจ๋ ์ค๋ ๋๊ฐ ์๋ก๋ฅผ ๊ธฐ๋ค๋ฆด ์ ์๋๋ก ํ์ฉํ์ง๋ง, ๋ ๋๊ธฐํ ์ฅ์น์ ์ฃผ์ ์ฐจ์ด์ ์ ์นด์ดํฐ๊ฐ 0์ ๋๋ฌํ ํ์๋ CountDownLatch๋ฅผ ์ฌ์ฌ์ฉํ ์ ์์ง๋ง ์ฅ๋ฒฝ์ด ๋ฌด๋์ง ํ์๋ CyclicBarrier๋ฅผ ๋ค์ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์
๋๋ค.
-
Java ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ์ด๋ ๋ฌด์์ ๋๊น?
๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ์ Java ํ๋ก๊ทธ๋จ์ด ์ฌ๋ฌ ๋ฉ๋ชจ๋ฆฌ, ํ๋ก์ธ์ ๋ฐ ์ด์ ์ฒด์ ์ํคํ
์ฒ์์ ๊ฒฐ์ ๋ก ์ ์ผ๋ก ์๋ํ ์ ์๋๋ก ํ๋ ์ผ๋ จ์ ๊ท์น ๋ฐ ์ง์นจ์
๋๋ค. ์ด๋ ๋ค์ค ํ๋ผ๋ฉํธ์ ๊ฒฝ์ฐ ํนํ ์ค์ํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ์ ํ ์ค๋ ๋์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ค๋ฅธ ์ค๋ ๋์ ํ์๋๋๋ก ๋ณด์ฅํ๋ฉฐ, ๊ทธ ์ค ํ๋๋ ์ฌ์ ๋ฐ์ ๊ด๊ณ์
๋๋ค. ์ด ๊ด๊ณ๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ณ๋ ฌ ํ๋ก๊ทธ๋จ์ ๋์์ ์์ธกํ๊ณ ๊ฒฐ์ ํ ์ ์๋๋ก ํ๋ ์ฌ๋ฌ ๊ท์น์ ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ณด์ฆ์ด ๋ฐ์ํ๊ธฐ ์ ์ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ค๋ ๋์ ๋ชจ๋ ์์ ์ ํ๋ก๊ทธ๋จ ์์ ๊ท์น(ํ๋ก๊ทธ๋จ ์์ ๊ท์น์ด๋ผ๊ณ ๋ ํจ)์ ๋ฐ๋ผ ํด๋น ์ค๋ ๋์ ๋ชจ๋ ์์ ๋ณด๋ค ๋จผ์ ๋ฐ์ํฉ๋๋ค.
- ๋ชจ๋ํฐ ์ ๊ธ ํด์ ๋ ๋์ผํ ๋ชจ๋ํฐ์ ๊ฐ ํ์ ์ ๊ธ(๋ชจ๋ํฐ ์ ๊ธ ๊ท์น์ด๋ผ๊ณ ๋ ํจ) ์ ์ ๋ฐ์ํฉ๋๋ค.
- ํ๋ฐ์ฑ ํ๋์ ๋ํ ์ฐ๊ธฐ๋ ํ๋ฐ์ฑ ๋ณ์ ๊ท์น์ ๋ฐ๋ผ ํด๋น ํ๋๋ฅผ ์ดํ์ ์ฝ์ ๋๋ง๋ค ๋ฐ์ํฉ๋๋ค.
- ์ค๋ ๋์์ Thread.start()์ ๋ํ ํธ์ถ์ Thread.join()์ด ์ฑ๊ณตํ ํ ๋๋ Thread.isAlive()๊ฐ false๋ฅผ ๋ฐํํ๋ ๊ฒฝ์ฐ Thread.start() ๊ท์น์ ๋ฐ๋ผ ์ค๋ ๋๊ฐ ์ค์ง๋์์์ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์๊ธฐ ์ ์ ๋ฐ์ํฉ๋๋ค. .
- ๋ค๋ฅธ ์ค๋ ๋์ ์ํด ์ค๋จ๋๋ ์ค๋ ๋๋ ์ค๋จ๋ ์ค๋ ๋๊ฐ ์ค๋ ๋์ ์ค๋จ ๊ท์น์ธ ์ค๋จ(InterruptedException์ ๋ฐ์์ํค๊ฑฐ๋ isInterrupted()๋ฅผ ํ์ธํ์ฌ)์ ์ธ์งํ๊ธฐ ์ ์ ๋ฐ์ํฉ๋๋ค.
- ๊ฐ์ฒด ์์ฑ์์ ๋์ ํด๋น ๊ฐ์ฒด์ ๋ํ ์ข ๋ฃ์ ๊ท์น์ธ ์ข ๋ฃ์ ๊ท์น์ด ์์๋๊ธฐ ์ ์ ๋ฐ์ํฉ๋๋ค.
- A๊ฐ B๋ณด๋ค ๋จผ์ ๋ฐ์ํ๊ณ B๊ฐ C๋ณด๋ค ๋จผ์ ๋ฐ์ํ๋ฉด A๊ฐ C๋ณด๋ค ๋จผ์ ๋ฐ์ํฉ๋๋ค. ์ฆ, ์ ์ด์ฑ์ด ๋ณด์ฅ๋จ์ ์๋ฏธํฉ๋๋ค.
-
ํ๋ฐ์ฑ ๋ณ์๋ ๋ฌด์์ ๋๊น?
ํ๋ฐ์ฑ์ ์์ฑ์๋ง ์ ์ฉํ ์ ์๋ ํน์ ์์ ์์
๋๋ค. ๋ณ๋ ฌ Java ํ๋ก๊ทธ๋จ์์๋ ๋๊ธฐํ ์ฅ์น๊ฐ ์์ผ๋ฉด ์์ฑ์ ๋ํด ์๋ก ๋ค๋ฅธ ์ค๋ ๋์ ์ํด ๋ณ๊ฒฝ๋ ๋ด์ฉ์ด ๋ค๋ฅธ ์ฌ๋์๊ฒ ํ์๋์ง ์์ต๋๋ค. ํ๋ฐ์ฑ ๋ณ์๋ ์ด์ ์ง๋ฌธ์ ํ๋ฐ์ฑ ๋ณ์ ๊ท์น์ ๋ช
์๋ ๋๋ก ํ์ ์ฝ๊ธฐ ์ ์ ์ฐ๊ธฐ๊ฐ ๋ฐ์ํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
-
์ค๋ ๋ ์์ ์ฑ์ด๋ ๋ฌด์์ ๋๊น? Vector ํด๋์ค๋ ์์ ํ๊ฐ์?
์ค๋ ๋ ์์ ์ฑ์ ์ฌ๋ฌ ์ค๋ ๋์์ ์คํ๋๊ฑฐ๋ ์ฌ์ฉ๋ ๋ ์ฝ๋๊ฐ ์๋ํ ๋๋ก ์๋ํ๋๋ก ๋ณด์ฅํ๋ ๊ฐ์ฒด ๋๋ ์ฝ๋์ ์์ฑ์
๋๋ค. ์๋ฅผ ๋ค์ด, ์ค๋ ๋ ์์ ์นด์ดํฐ๋ ์ฌ๋ฌ ์ค๋ ๋์์ ๋์ผํ ์นด์ดํฐ ์ธ์คํด์ค๊ฐ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ ์นด์ดํธ๋ฅผ ๊ฑด๋๋ฐ์ง ์์ต๋๋ค. ๋ถ๋ช
ํ ์ปฌ๋ ์
ํด๋์ค๋ ์ค๋ ๋๋ก๋ถํฐ ์์ ํ ํด๋์ค์ ์ค๋ ๋๋ก๋ถํฐ ์์ ํ์ง ์์ ํด๋์ค์ ๋ ๊ฐ์ง ๋ฒ์ฃผ๋ก ๋๋ ์ ์์ต๋๋ค. Vector๋ ์ค๋ ๋๋ก๋ถํฐ ์์ ํ๋ฉฐ Vector์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฉ์๋๋ฅผ ๋๊ธฐํํ์ฌ ์ด๋ฅผ ๋ฌ์ฑํ๋ ๋ฐ๋ฉด, ์ด์ ์์ํ๋ ArrayList๋ ์ค๋ ๋๋ก๋ถํฐ ์์ ํ์ง ์์ต๋๋ค.
-
๊ฒฝ์ ์กฐ๊ฑด์ด๋ ๋ฌด์์ ๋๊น?
๊ฒฝ์ ์กฐ๊ฑด์ ๋ฏธ๋ฌํ ๋ฒ๊ทธ์ ์์ธ์
๋๋ค. ์ด๋ฆ ๊ทธ๋๋ก ์ฌ๋ฌ ์ค๋ ๋ ๊ฐ์ ๊ฒฝํฉ์ผ๋ก ์ธํด ๊ฒฝ์ ์กฐ๊ฑด์ด ๋ฐ์ํ๋๋ฐ, ๋จผ์ ์คํํด์ผ ํ ์ค๋ ๋๊ฐ ๊ฒฝ์์์ ์ง๊ณ ๋ ๋ฒ์งธ ์ค๋ ๋๊ฐ ์คํ๋๋ฉด ์ฝ๋์ ๋์์ด ๋ฐ๋์ด ๋น๊ฒฐ์ ์ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด๋ ์ค๋ ๋ ๊ฐ ๊ฒฝ์์ ์ง์ ๋ถํ ํน์ฑ์ผ๋ก ์ธํด ํฌ์ฐฉํ๊ณ ์ฌํํ๊ธฐ ๊ฐ์ฅ ์ด๋ ค์ด ๋ฒ๊ทธ ์ค ์ผ๋ถ์
๋๋ค. ๊ฒฝ์ ์กฐ๊ฑด์ ์๋ก๋ ๋ถ๊ท์นํ ์คํ์ด ์์ต๋๋ค.
-
์ค๋ ๋๋ฅผ ์ค์งํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
๋๋ ํญ์ Java๊ฐ ๋ชจ๋ ๊ฒ์ ๋ํด ํ๋ถํ API๋ฅผ ์ ๊ณตํ๋ค๊ณ ๋งํ์ง๋ง ์์ด๋ฌ๋ํ๊ฒ๋ ์ค๋ ๋๋ฅผ ์ค์งํ๋ ํธ๋ฆฌํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง ์์ต๋๋ค. JDK 1.0์๋ ์ ์ฌ์ ์ธ ๊ต์ฐฉ ์ํ ์ํ์ผ๋ก ์ธํด ํฅํ ๋ฆด๋ฆฌ์ค์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ผ๋ก ํ์๋ stop(), suspens() ๋ฐ ์ด๋ ฅ์()์ ๊ฐ์ ์ฌ๋ฌ ์ ์ด ๋ฉ์๋๊ฐ ์์์ต๋๋ค. ๊ทธ ์ดํ๋ก Java API ๊ฐ๋ฐ์๋ ์ค๋ ๋๋ฅผ ์ ๊ณตํ๋ ค๋ ์๋๋ฅผ ํ์ง ์์์ต๋๋ค. -์ ํญ์ฑ -์ค๋ ๋๋ฅผ ๋ฉ์ถ๋ ์์ ํ๊ณ ์ฐ์ํ ๋ฐฉ๋ฒ์
๋๋ค. ํ๋ก๊ทธ๋๋จธ๋ ๋๋ถ๋ถ ์ค๋ ๋๊ฐ run() ๋๋ call() ๋ฉ์๋ ์คํ์ ๋ง์น์๋ง์ ์์ฒด์ ์ผ๋ก ์ค์ง๋๋ค๋ ์ฌ์ค์ ์์กดํฉ๋๋ค. ์๋์ผ๋ก ์ค์งํ๋ ค๋ฉด ํ๋ก๊ทธ๋๋จธ๋ ํ๋ฐ์ฑ ๋ถ์ธ ๋ณ์๋ฅผ ํ์ฉํ๊ณ run() ๋ฉ์๋์ ๋ฃจํ๊ฐ ์๋ ๊ฒฝ์ฐ ๊ฐ ๋ฐ๋ณต์์ ํด๋น ๊ฐ์ ํ์ธํ๊ฑฐ๋, Interrupt() ๋ฉ์๋๋ก ์ค๋ ๋๋ฅผ ์ค๋จํ์ฌ ์์
์ ๊ฐ์๊ธฐ ์ทจ์ํฉ๋๋ค.
-
์ค๋ ๋์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ์ด๋ป๊ฒ ๋๋์?
์ด๊ฒ์ ์ข์ ํธ๋ฆญ ์ง๋ฌธ ์ค ํ๋์
๋๋ค. ๊ฐ๋จํ ๋งํด์, ์์ธ๊ฐ ํฌ์ฐฉ๋์ง ์์ผ๋ฉด ์ค๋ ๋๋ ์ข
๋ฃ๋๊ณ , ํฌ์ฐฉ๋์ง ์์ ์์ธ์ ๋ํ ํธ๋ค๋ฌ๊ฐ ์ค์น๋๋ฉด ์ฝ๋ฐฑ์ ๋ฐ๊ฒ ๋ฉ๋๋ค. Thread.UncaughtExceptionHandler๋ catch๋์ง ์์ ์์ธ๋ก ์ธํด ์ค๋ ๋๊ฐ ๊ฐ์๊ธฐ ์ค์ง๋ ๋ ํธ์ถ๋๋ ํธ๋ค๋ฌ์ ๋ํ ์ค์ฒฉ ์ธํฐํ์ด์ค๋ก ์ ์๋ ์ธํฐํ์ด์ค์
๋๋ค. ํฌ์ฐฉ๋์ง ์์ ์์ธ๋ก ์ธํด ์ค๋ ๋๊ฐ ์ข
๋ฃ๋๋ ค๊ณ ํ๋ฉด JVM์ Thread.getUncaughtExceptionHandler()๋ฅผ ์ฌ์ฉํ์ฌ UncaughtExceptionHandler๊ฐ ์๋์ง ํ์ธํ๊ณ ํธ๋ค๋ฌ์ uncaughtException() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ค๋ ๋์ ์์ธ๋ฅผ ์ธ์๋ก ์ ๋ฌํฉ๋๋ค.
-
๋ ์ค๋ ๋ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
๊ณต์ ๊ฐ์ฒด๋ BlockingQueue์ ๊ฐ์ ๋ณ๋ ฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ ๋ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ์ ์์ต๋๋ค.
-
ํต์ง์ ํต์งAll์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น?
์ด๊ฒ์ ๋ ๋ค๋ฅธ ๊น๋ค๋ก์ด ์ง๋ฌธ์
๋๋ค. ํ๋์ ๋ชจ๋ํฐ๊ฐ ์ฌ๋ฌ ์ค๋ ๋์ ์ํด ๋ชจ๋ํฐ๋ง๋ ์ ์๊ธฐ ๋๋ฌธ์ Java API ๊ฐ๋ฐ์๋ ํ๋ ๋๋ ๋ชจ๋ ์ค๋ ๋์๊ฒ ์ํ ๋ณ๊ฒฝ์ ์๋ฆฌ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง๋ง ๊ตฌํ์ ์ ๋ฐ๋ง ์ ๊ณตํฉ๋๋ค. inform() ๋ฉ์๋์๋ ํน์ ์ค๋ ๋๋ฅผ ์ ํํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ผ๋ฏ๋ก ๋จ ํ๋์ ์ค๋ ๋๋ง ๋๊ธฐ ์ค์์ ํ์คํ ์๊ณ ์๋ ๊ฒฝ์ฐ์๋ง ์ ์ฉํฉ๋๋ค. ๋ฐ๋ฉด์ informal()์ ๋ชจ๋ ์ค๋ ๋์ ์๋ฆฌ๊ณ ๋ชจ๋ํฐ๋ฅผ ๋๊ณ ๊ฒฝ์ํ ์ ์๋๋ก ํ์ฌ ์ต์ํ ํ๋์ ์ค๋ ๋๊ฐ ์์ผ๋ก ์ด๋ํ๋๋ก ํฉ๋๋ค.
-
Thread ํด๋์ค์ wait,notify,notifyAll์ด ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
์ด๋ ํ๋ณด์๊ฐ ๊ธฐ์กด ์์คํ
์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํ๋์ง ๋๋ ์ฒ์์๋ ์ด์ธ๋ฆฌ์ง ์๋ ๋น์ทํ ๊ฒ์ ์๊ฐํด ๋ณธ ์ ์ด ์๋์ง ํ
์คํธํ๋ ์ค๊ณ ์ง๋ฌธ์
๋๋ค. ์ด ์ง๋ฌธ์ ๋๋ตํ๋ ค๋ฉด ์ด๋ฌํ ๋ฉ์๋๊ฐ Object ํด๋์ค์์ ๋ ์ ๊ตฌํ๋๊ณ Thread ํด๋์ค์์๋ ๊ตฌํ๋์ง ์๋ ๋ช ๊ฐ์ง ์ด์ ๋ฅผ ์ ์ํด์ผ ํฉ๋๋ค. ์ฒซ ๋ฒ์งธ ๋ถ๋ช
ํ ์ด์ ๋ Java๊ฐ ์ค๋ ๋ ์์ค์ด ์๋ ๊ฐ์ฒด ์์ค์์ ์ ๊ธ์ ์ง์ํ๋ค๋ ๊ฒ์
๋๋ค. ๋ชจ๋ ๊ฐ์ฒด์๋ ์ค๋ ๋๊ฐ ํ๋ํ๋ ์ ๊ธ์ด ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ค๋ ๋๊ฐ ํน์ ์ ๊ธ์ ๊ธฐ๋ค๋ ค์ผ ํ๋ ๊ฒฝ์ฐ ์ด ์ค๋ ๋๋ณด๋ค ๊ฐ์ฒด์์ wait()๋ฅผ ํธ์ถํ๋ ๊ฒ์ด ๋ ํฉ๋ฆฌ์ ์
๋๋ค. Thread ํด๋์ค์์ wait()๊ฐ ์ ์ธ๋ ๊ฒฝ์ฐ ์ค๋ ๋๊ฐ ์ด๋ค ์ ๊ธ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋์ง ๋ช
ํํ์ง ์์ต๋๋ค. ์ฆ, wait, inform, informAll์ lock ์์ค์์ ๋์ํ๋ฏ๋ก lock์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ฏ๋ก Object ํด๋์ค์์ ์ ์ธํ๋ ๊ฒ์ด ๋ ํธ๋ฆฌํ๋ค.
-
ThreadLocal ๋ณ์๋ ๋ฌด์์ ๋๊น?
ThreadLocal ๋ณ์๋ Java ํ๋ก๊ทธ๋๋จธ๊ฐ ์ฌ์ฉํ ์ ์๋ ํน๋ณํ ์ ํ์ ๋ณ์์
๋๋ค. ์ํ์ ์ํ ๋ณ์๊ฐ ์๋ ๊ฒ์ฒ๋ผ ์ค๋ ๋์๋ ThreadLocal ๋ณ์๊ฐ ์์ต๋๋ค. ์ด๋ ์์ฑ ๋น์ฉ์ด ๋ง์ด ๋๋ ๊ฐ์ฒด์ ๋ํด ์ค๋ ๋ ์์ ์ฑ์ ๋ฌ์ฑํ๋ ์ข์ ๋ฐฉ๋ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด ThreadLocal์ ์ฌ์ฉํ์ฌ SimpleDateFormat์ ์ค๋ ๋๋ก๋ถํฐ ์์ ํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ ๋น์ฉ์ด ๋ง์ด ๋๋ ํด๋์ค์ด๋ฏ๋ก ํธ์ถ๋ง๋ค ๋ณ๋์ ์ธ์คํด์ค๊ฐ ํ์ํ ๋ก์ปฌ ๋ฒ์์์๋ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ฐ ์ค๋ ๋์ ๊ณ ์ ํ ๋ณต์ฌ๋ณธ์ ์ ๊ณตํ๋ฉด ์ผ์์ด์กฐ์ ํจ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์ฒซ์งธ, ์๋ก์ด ๊ณ ์ ๊ฐ์์ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋น์ผ ๊ฐ์ฒด์ ์ธ์คํด์ค ์๋ฅผ ์ค์ด๊ณ , ๋์งธ, ๋๊ธฐํ ๋ฐ ๋ถ๋ณ์ฑ์ ์์ง ์๊ณ ์ค๋ ๋ ์์ ์ฑ์ ๋ฌ์ฑํฉ๋๋ค. ์ค๋ ๋ ๋ก์ปฌ ๋ณ์์ ๋ ๋ค๋ฅธ ์ข์ ์๋ ๋ค์ค ์ค๋ ๋ ํ๊ฒฝ์์ ์์ฑํ๋ ๋ฐ ๋น์ฉ์ด ๋ง์ด ๋๋ Random ๊ฐ์ฒด์ ์ธ์คํด์ค ์๋ฅผ ์ค์ด๋ ThreadLocalRandom ํด๋์ค์
๋๋ค.
-
ํจ์ฒํ์คํฌ๋ ๋ฌด์์ธ๊ฐ์?
FutureTask๋ ๋ณ๋ ฌ Java ์ ํ๋ฆฌ์ผ์ด์
์์ ์ทจ์ ๊ฐ๋ฅํ ๋น๋๊ธฐ ๊ณ์ฐ์
๋๋ค. ์ด ํด๋์ค๋ ๊ณ์ฐ ์์ ๋ฐ ์ค์ง ๋ฉ์๋, ๊ณ์ฐ ์ํ ์ฟผ๋ฆฌ ๋ฐ ๊ฒฐ๊ณผ ๊ฒ์ ๋ฉ์๋๊ฐ ํฌํจ๋ ๊ธฐ๋ณธ Future ๊ตฌํ์ ์ ๊ณตํฉ๋๋ค. ๊ฒฐ๊ณผ๋ ๊ณ์ฐ์ด ์๋ฃ๋ ๊ฒฝ์ฐ์๋ง ์ป์ ์ ์์ผ๋ฉฐ ๊ณ์ฐ์ด ์์ง ์๋ฃ๋์ง ์์ ๊ฒฝ์ฐ getter ๋ฉ์๋๊ฐ ์ฐจ๋จ๋ฉ๋๋ค. FutureTask ๊ฐ์ฒด๋ Callable ๋ฐ Runnable ๊ฐ์ฒด๋ฅผ ๋ํํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. FutureTask๋ Runnable์ ๊ตฌํํ๋ฏ๋ก ์คํ์ ์ํด Executor๋ก ์ ๋ฌ๋ ์ ์์ต๋๋ค.
-
Interrupted์ isInterrupted์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น?
Interrupted()์ isInterrupted()์ ์ฃผ์ ์ฐจ์ด์ ์ ์ ์๋ ์ธํฐ๋ฝํธ ์ํ๋ฅผ ์ฌ์ค์ ํ์ง๋ง ํ์๋ ๊ทธ๋ ์ง ์๋ค๋ ๊ฒ์
๋๋ค. Java์ ์ธํฐ๋ฝํธ ๋ฉ์ปค๋์ฆ์ ์ธํฐ๋ฝํธ ์ํ๋ผ๊ณ ์๋ ค์ง ๋ด๋ถ ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ๋ฉ๋๋ค. Thread.interrupt()๋ฅผ ํธ์ถํ์ฌ ์ค๋ ๋๋ฅผ ์ค๋จํ๋ฉด ์ด ํ๋๊ทธ๊ฐ ์ค์ ๋ฉ๋๋ค. ์ค๋จ๋ ์ค๋ ๋๊ฐ ์ ์ Thread.interrupted() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ธํฐ๋ฝํธ ์ํ๋ฅผ ํ์ธํ๋ฉด ์ธํฐ๋ฝํธ ์ํ๊ฐ ์ฌ์ค์ ๋ฉ๋๋ค. ์ค๋ ๋๊ฐ ๋ค๋ฅธ ์ค๋ ๋์ ์ธํฐ๋ฝํธ ์ํ๋ฅผ ํ์ธํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋น์ ์ isInterrupted() ๋ฉ์๋๋ ์ธํฐ๋ฝํธ ํ๋๊ทธ๋ฅผ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก InterruptedException์ ๋ฐ์์์ผ ์ข
๋ฃ๋๋ ๋ชจ๋ ๋ฉ์๋๋ ์ธํฐ๋ฝํธ ํ๋๊ทธ๋ฅผ ์ฌ์ค์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์ธํฐ๋ฝํธ()๋ฅผ ํธ์ถํ๋ฉด ํ๋๊ทธ๊ฐ ์ฆ์ ๋ค์ ์ค์ ๋ ๊ฐ๋ฅ์ฑ์ด ํญ์ ์์ต๋๋ค.
-
๋๊ธฐํ๋ ๋ธ๋ก์์ ๋๊ธฐ ๋ฐ ์๋ฆผ ๋ฉ์๋๊ฐ ํธ์ถ๋๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
์ ์ ๋ธ๋ก์ด๋ ๋ฉ์๋์์ ๋๊ธฐ ๋ฐ ์๋ฆผ์ ํธ์ถํ๋ ์ฃผ๋ ์ด์ ๋ Java API์์ ์ด๋ฅผ ์๊ตฌํ๊ธฐ ๋๋ฌธ์
๋๋ค. ๋๊ธฐํ๋ ๋ธ๋ก ์ธ๋ถ์์ ํธ์ถํ๋ฉด ์ฝ๋์์ IllegalMonitorStateException์ด ๋ฐ์ํฉ๋๋ค. ๋ ์๋ฆฌํ ์ด์ ๋ ๋๊ธฐ ํธ์ถ๊ณผ ์๋ฆผ ํธ์ถ ๊ฐ์ ๊ฒฝํฉ ์ํ๋ฅผ ํผํ๋ ๊ฒ์
๋๋ค.
-
๋ฃจํ์์ ๋๊ธฐ ์ํ๋ฅผ ํ์ธํด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
๋๊ธฐ ์ค์ธ ์ค๋ ๋๊ฐ ๋ฃจํ์์ ๋๊ธฐ ์ํ๋ฅผ ํ์ธํ์ง ์์ผ๋ฉด ์๋ชป๋ ๊ฒฝ๊ณ ๋ฐ ์๋ชป๋ ๊นจ์ฐ๊ธฐ ํธ์ถ์ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฉฐ ์ํ์ ๋๋ฌํ์ง ์๋๋ผ๋ ๋จ์ํ ์ข
๋ฃ๋ฉ๋๋ค. ๋๊ธฐ ์ค์ธ ์ค๋ ๋๊ฐ ๊นจ์ด๋ ๋ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ์ํ๊ฐ ์ฌ์ ํ ์ ํจํ ์ ์๋ค๋ ์ฌ์ค์ ์๊ฐํ์ง ์์ต๋๋ค. ์ค์ ๋ก๋ ๊ณผ๊ฑฐ์ผ ์๋ ์์ง๋ง, inform() ๋ฉ์๋๊ฐ ํธ์ถ๋ ํ ์ค๋ ๋๊ฐ ๊นจ์ด๋๊ธฐ ์ ์ ๋ณ๊ฒฝ๋์์ต๋๋ค. ๋ฐ๋ผ์ ๋ฃจํ ๋ด์์ wait()๋ฅผ ํธ์ถํ๋ ๊ฒ์ด ํญ์ ๋ ์ข์ต๋๋ค.
-
๋๊ธฐํ๋ ์ปฌ๋ ์ ๊ณผ ๋์ ์ปฌ๋ ์ ์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น?
๋๊ธฐํ๋ ์ปฌ๋ ์
๊ณผ ๋์ ์ปฌ๋ ์
๋ชจ๋ ์ค๋ ๋๋ก๋ถํฐ ์์ ํ ์ปฌ๋ ์
์ ์ ๊ณตํ์ง๋ง ํ์๊ฐ ๋ ํ์ฅ ๊ฐ๋ฅํฉ๋๋ค. Java 1.5 ์ด์ ์๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋๊ธฐํ๋ ์ปฌ๋ ์
์๋ง ์ก์ธ์คํ ์ ์์๋๋ฐ, ์ด๋ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์ก์ธ์คํ ๋ ๊ฒฝํฉ์ ์์ธ์ด ๋์ด ์์คํ
ํ์ฅ์ ์ด๋ ต๊ฒ ๋ง๋ค์์ต๋๋ค. Java 5์์๋ ์ค๋ ๋ ์์ ์ฑ์ ์ ๊ณตํ ๋ฟ๋ง ์๋๋ผ ์ ๊ธ ์ ๊ฑฐ ๋ฐ ๋ด๋ถ ํ
์ด๋ธ ๋ถํ ๊ณผ ๊ฐ์ ์ต์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ํ์ฅ์ฑ์ ํฅ์์ํค๋ ConcurrentHashMap๊ณผ ๊ฐ์ ๋์ ์ปฌ๋ ์
์ ๋์
ํ์ต๋๋ค.
-
์คํ๊ณผ ํ์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น?
๋ฉํฐ์ค๋ ๋ฉ์ ๋ํ ์ง๋ฌธ์ ์ด ์ง๋ฌธ์ด ๋ํ๋๋ ์ด์ ๋ ๋ฌด์์
๋๊น? ์คํ์ ์ค๋ ๋์ ๋ฐ์ ํ๊ฒ ์ฐ๊ด๋ ๋ฉ๋ชจ๋ฆฌ ์กฐ๊ฐ์ด๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ฐ ์ค๋ ๋์๋ ์ง์ญ ๋ณ์, ๋ฉ์๋ ๋งค๊ฐ๋ณ์ ๋ฐ ํธ์ถ ์คํ์ ์ ์ฅํ๋ ์์ฒด ์คํ์ด ์์ต๋๋ค. ํ ์ค๋ ๋์ ์คํ์ ์ ์ฅ๋ ๋ณ์๋ ๋ค๋ฅธ ์ค๋ ๋์ ํ์๋์ง ์์ต๋๋ค. ๋ฐ๋ฉด, ํ์ ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ณต์ ํ๋ ๊ณตํต ๋ฉ๋ชจ๋ฆฌ ์์ญ์
๋๋ค. ๋ก์ปฌ ์์ค์ด๋ ๋ค๋ฅธ ์์ค์ด๋ ๊ด๊ณ์์ด ๊ฐ์ฒด๋ ํ์ ์์ฑ๋ฉ๋๋ค. ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ์ค๋ ๋๋ ์ผ๋ฐ์ ์ผ๋ก ํ์ ๊ฐ์ ์คํ์ ์บ์ํฉ๋๋ค. ์ฌ๊ธฐ์ ํ๋ฐ์ฑ ๋ณ์๊ฐ ์๋ํฉ๋๋ค. Volatile์ ์ค๋ ๋์๊ฒ ์ฃผ ๋ฉ๋ชจ๋ฆฌ์์ ๋ณ์๋ฅผ ์ฝ๋๋ก ์ง์ํฉ๋๋ค.
-
์ค๋ ๋ ํ์ด๋ ๋ฌด์์ ๋๊น?
์ค๋ ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ์๊ฐ๊ณผ ๋ฆฌ์์ค ์ธก๋ฉด์์ ๋น์ฉ์ด ๋ง์ด ๋ญ๋๋ค. ์์ฒญ์ด ์ฒ๋ฆฌ๋๋ ๋์ ์ค๋ ๋๋ฅผ ์์ฑํ๋ฉด ์๋ต ์๊ฐ์ด ๋๋ ค์ง๊ณ ํ๋ก์ธ์ค๋ ์ ํ๋ ์์ ์ค๋ ๋๋ง ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์
์์ ์ ์ค๋ ๋ ํ์ด ์์ฑ๋๊ณ ์ค๋ ๋๋ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฌ์ฉ๋ฉ๋๋ค. ์ด ์ค๋ ๋ ํ์ "์ค๋ ๋ ํ"์ด๋ผ๊ณ ํ๋ฉฐ, ๊ทธ ์์ ์๋ ์ค๋ ๋๋ฅผ ์์
์ ์ค๋ ๋๋ผ๊ณ ํฉ๋๋ค. Java 1.5๋ถํฐ Java API๋ ๋จ์ ์๊ฐ๋น ํ๋์ ์์
๋ง ์ฒ๋ฆฌํ๋ ๋จ์ผ ์ค๋ ๋ ํ, ๊ณ ์ ์ค๋ ๋ ํ, ๊ณ ์ ๊ฐ์์ ํ ๋ฑ ๋ค์ํ ์ค๋ ๋ ํ์ ์์ฑํ ์ ์๋ Executor ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ค๋ ๋, ์บ์๋ ์ค๋ ๋ ํ, ํ์ฅ ๊ฐ๋ฅํ ํ๋ก ๋จ๊ธฐ ์์
์ด ๋ง์ ์ ํ๋ฆฌ์ผ์ด์
์ ์ ํฉํฉ๋๋ค.
-
์์ฐ์ ์๋น์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
์ค์ ๋ก ํด๊ฒฐํ๋ ๋๋ถ๋ถ์ ์ค๋ ๋ ๋ฌธ์ ๋ ํ ์ค๋ ๋๊ฐ ๋ฌธ์ ๋ฅผ ์์ฑํ๊ณ ๋ ๋ฒ์งธ ์ค๋ ๋๊ฐ ๋ฌธ์ ๋ฅผ ์๋นํ๋ ์์ฐ์ ์๋น์ ํจํด์์ ๋น๋กฏ๋ฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๋ด๋ถ ์ค๋ ๋ ์ํธ ์์ฉ์ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ ์์์ผ ํฉ๋๋ค. ๋ฎ์ ์์ค์์๋ ๋๊ธฐ ๋ฐ ์๋ฆผ ๋ฉ์๋๋ฅผ ํ์ฉํ ์ ์๊ณ , ๋์ ์์ค์์๋ Semaphore ๋๋ BlockingQueue๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.
-
๊ต์ฐฉ์ํ๋ฅผ ํผํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
๊ต์ฐฉ ์ํ๋ ์ค๋ ๋๊ฐ ๋ ๋ฒ์งธ ์ค๋ ๋๊ฐ ์ด๋ค ์์
์ ์ํํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์๊ณ , ๋ ๋ฒ์งธ ์ค๋ ๋๋ ๋์์ ์ฒซ ๋ฒ์งธ ์ค๋ ๋์ ๋์ผํ ์์
์ ๊ธฐ๋ค๋ฆฌ๋ ์ํ์
๋๋ค. ์ด๋ ํ๋ก๊ทธ๋จ์ด ์ ์ง๋์ด ์๋ํ ๋๋ก ์๋ํ์ง ์๊ฒ ๋ง๋๋ ๋งค์ฐ ์ฌ๊ฐํ ๋ฌธ์ ์
๋๋ค. ๊ต์ฐฉ ์ํ๋ ๋ค์ 4๊ฐ์ง ์ํ์ ๋๋ฌํ ๋ ๋ฐ์ํฉ๋๋ค.
- ์ํธ๋ฐฐ์ : ๋ถํ ๋ถ๊ฐ โโ๋ชจ๋์์๋ ์ต์ํ ํ๋์ ์์์ ์ ์ ํด์ผ ํฉ๋๋ค. ์ฃผ์ด์ง ์๊ฐ์ ํ๋์ ํ๋ก์ธ์ค๋ง ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๋ณด๋ฅ ๋ฐ ๋๊ธฐ: ํ๋ก์ธ์ค๋ ์ต์ํ ํ๋์ ๋ฆฌ์์ค๋ฅผ ๋ณด์ ํ๊ณ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๋ณด์ ํ ์ถ๊ฐ ๋ฆฌ์์ค๋ฅผ ์์ฒญํฉ๋๋ค.
- ์ฌ์ ์ ๋ฆฌ ์์: ์ด์ ์ฒด์ ๋ ๋ฆฌ์์ค๊ฐ ์ด๋ฏธ ์ ์ ๋ ๊ฒฝ์ฐ ๋ฆฌ์์ค๋ฅผ ์ฌํ ๋นํ์ง ์์ผ๋ฉฐ ๋ณด๋ฅ ํ๋ก์ธ์ค์ ์๋ฐ์ ์ผ๋ก ์ ๊ณต๋์ด์ผ ํฉ๋๋ค.
- ์ํ ๋๊ธฐ(Cyclic wait): ํ๋ก์ธ์ค๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ๋ฆฌ์์ค๋ฅผ ํด์ ํ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ณ , ํด๋น ํ๋ก์ธ์ค๋ ์ฒซ ๋ฒ์งธ ํ๋ก์ธ์ค๊ฐ ๋ฆฌ์์ค๋ฅผ ํด์ ํ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
-
๋ผ์ด๋ธ๋ฝ๊ณผ ๊ต์ฐฉ์ํ์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?
๋ผ์ด๋ธ๋ก์ ๊ต์ฐฉ ์ํ์ ์ ์ฌํฉ๋๋ค. ๋ผ์ด๋ธ๋ก์์๋ง ๊ด๋ จ ์ค๋ ๋ ๋๋ ํ๋ก์ธ์ค์ ์ํ๊ฐ ์๋ก์ ๋ฐ๋ผ ์ง์์ ์ผ๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค. Livelock์ ์์ ๋ถ์กฑ์ ํน๋ณํ ๊ฒฝ์ฐ์
๋๋ค. ๋ผ์ด๋ธ๋ก์ ์ค์ ์๋ ๋ ์ฌ๋์ด ์ข์ ๋ณต๋์์ ๋ง๋ ์์๋ฅผ ๊ฐ์ถ๋ ค๊ณ ๋
ธ๋ ฅํ๋ฉด์ ์์ผ๋ก ๋ฌผ๋ฌ์์ ๋์์ด ์ข์ฐ๋ก ์์ง์ด๋ ๊ฒ์
๋๋ค.
๋ฒ์ญ: ์ค๋ ๋๋ณ ์์ 50๊ฐ ์ธํฐ๋ทฐ ์ง๋ฌธ. 1 ๋ถ.
์ ์
์, ์๋ จ๋ ํ๋ก๊ทธ๋๋จธ๋ฅผ ์ํ ์์ 50๊ฐ์ง Java ์ค๋ ๋ ์ธํฐ๋ทฐ ์ง๋ฌธ ๋ต๋ณ ์๋ณธ ๊ธฐ์ฌ ๋ฒ์ญ์ ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์
๋๋ค .
๋ ๋ฒ์งธ ๋ถ๋ถ.
์ฐธ๊ณ : ๊ธฐ์ฌ๊ฐ ํฐ ๊ฒ์ผ๋ก ํ๋ช
๋์์ผ๋ฏ๋ก ํ๋์ ์ฃผ์ ์ ๋ง์ง ์์ต๋๋ค. ๊ฒ๋ค๊ฐ ๊ฝค ๋ณต์กํด์ ์ต์ ์ ๋คํด ๊ตฌ๊ธ๋งํด ๋ดค์ง๋ง ๊ทธ๋๋ ๋ง์ฐฌ๊ฐ์ง๋ค. ๋ฐ๋ผ์ ์์ด์ ๋ฅํตํ ์ฐธ๊ฐ์๋ค์ ํน์๋ผ๋ ์๋ชป ์ดํดํ๊ฑฐ๋ ์๋ชป ๋ฒ์ญํ ๊ฒฝ์ฐ๊ฐ ์์ผ๋ฉด ์๋ฌธ์ ๋ณด์๊ณ ๋ฒ์ญ๋ฌธ๊ณผ ๋น๊ตํด ๋ณด์๊ธธ ๋ฐ๋๋๋ค. ๋ฏธ๋ฆฌ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ ๋ฐฐ๋ ํ๋ฐฐ๋ , ๊ฒฝํ์ด ๋ง๋ ์ด๋ณด์๋ ๋ชจ๋ ์ธํฐ๋ทฐ์์ ์ค๋ ๋, ๋ณ๋ ฌ ์ฒ๋ฆฌ ๋ฐ ๋ฉํฐ์ค๋ ๋ฉ์ ๋ํ ๋ช ๊ฐ์ง ์ง๋ฌธ์ ์ง๋ฉดํ๊ฒ ๋ฉ๋๋ค. ์ค์ ๋ก ์ด๋ฌํ ๋ด์ฅ๋ ๋์์ฑ ์ง์์ Java์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ค ํ๋์ด๋ฉฐ Java๊ฐ ๊ธฐ์
๊ฐ์ ํ๋ก๊ทธ๋๋จธ ๋ชจ๋ ์ฌ์ด์์ ์ธ๊ธฐ๋ฅผ ์ป๋ ๋ฐ ๋์์ด ๋์์ต๋๋ค. ์์ต์ฑ์ด ๊ฐ์ฅ ์ข์ Java ๊ฐ๋ฐ์ ์ง์๋ฅผ ์ป์ผ๋ ค๋ฉด ๋ฐ์ด๋ ๋ฉํฐ์ค๋ ๋ฉ ๊ธฐ์ ๊ณผ ๊ณ ์ฑ๋ฅ, ์ ์ง์ฐ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ, ๋๋ฒ๊น
๋ฐ ํ๋ ๊ฒฝํ์ด ํ์ํฉ๋๋ค. ๋ฐ๋ผ์ ๋ฉด์ ์์ ๊ฐ์ฅ ๋ง์ด ์๊ตฌ๋๋ ๊ธฐ์ ์ค ํ๋์
๋๋ค. ์ผ๋ฐ์ ์ธ Java ๋ฉด์ ์์๋ ๋ฉด์ ๊ด์ด ์ค๋ ๋์ ๊ธฐ๋ณธ ๊ฐ๋
๋ถํฐ ์ฒ์ฒํ ์์ํ์ฌ ์ค๋ ๋๊ฐ ์ ํ์ํ์ง, ์ด๋ป๊ฒ ์์ฑํ๋์ง, ์ด๋ค ๋ฐฉ์์ผ๋ก ์์ฑํ๋ ๊ฒ์ด ์ข์์ง, Thread์์ ์์ ๋ฐ๊ฑฐ๋ Runnable์ ๊ตฌํํ๋์ง ๋ฑ์ ์ง๋ฌธ์ ํ ํ ์ฒ์ฒํ ์งํํฉ๋๋ค. ๋์์ฑ์ ์ด๋ ค์, ๋ณ๋ ฌ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ ์ ์ง๋ฉดํ๋ ์ด๋ ค์, JDK 1.5์ ๋์
๋ ๋์ ์์ค์ ๋์์ฑ ์ ํธ๋ฆฌํฐ, ๋ณ๋ ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ์์น ๋ฐ ๋์์ธ ํจํด, ๊ณ ์ ์ ์ธ ๋ฉํฐ์ค๋ ๋ฉ ๋ฌธ์ ์ ๋ํด ์ค๋ช
ํฉ๋๋ค. ๋ฉํฐ์ค๋ ๋ฉ์ ๊ธฐ๋ณธ์ ์๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ต์ฐฉ ์ํ, ๊ฒฝ์ ์กฐ๊ฑด, ๋ฉ๋ชจ๋ฆฌ ๋ถ์ผ์น ๋ฐ ๋ค์ํ ์ค๋ ๋ ์์ ์ฑ ๋ฌธ์ ์ ๊ฐ์ ๋์์ฑ ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์์์ผ ํฉ๋๋ค. ์ด๋ฌํ ๊ธฐ์ ์ ์ฒ ์ ํ ํ
์คํธ๋ฅผ ๊ฑฐ์ณ ๋ค์ํ ๋ฉํฐ์ค๋ ๋ฉ ๋ฐ ๋์์ฑ ๋ฌธ์ ๋ฅผ ์ ์ํฉ๋๋ค. ๋ง์ Java ๊ฐ๋ฐ์๋ ์ผ๋ฐ์ ์ผ๋ก ์ธํฐ๋ทฐ ์ ์ ์ง๋ฌธ์ ์ฝ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด๋ ๋์ ๊ฒ์ ์๋์ง๋ง ์ด๋ฅผ ์ดํดํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ง๋ฌธ์ ์๊ณ ๋๊ฐ์ ์ฐ์ต์ ํ๋ฉด ์๊ฐ๋ญ๋น๋ ๋ง์ด ๋์ด์ ์ด ๋ชฉ๋ก์ ๋ง๋ค์์ต๋๋ค.
GO TO FULL VERSION