-
์ค๋ ๋๊ฐ ์ ๊ธ์ ๋ณด์ ํ๊ณ ์๋์ง ํ์ธํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
์ ํ ์ธํฐ๋ทฐ์์ ์ด ์ง๋ฌธ์ ์ ํ๊ธฐ ์ ๊น์ง๋ ์ค๋ ๋๊ฐ ํ์ฌ ์ ๊ธ์ ์ ์งํ๊ณ ์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์๋ค๋ ๊ฒ์ ์ ํ ๋ชฐ๋์ต๋๋ค. java.lang.Thread์๋holdLock() ๋ฉ์๋๊ฐ ์์ผ๋ฉฐ, ํ์ฌ ์ค๋ ๋๊ฐ ํน์ ๊ฐ์ฒด์ ๋ํ ๋ชจ๋ํฐ๋ฅผ ๋ณด์ ํ๊ณ ์๋ ๊ฒฝ์ฐ์๋ง true๋ฅผ ๋ฐํํฉ๋๋ค.
-
์ค๋ ๋ ๋คํ๋ฅผ ์ป๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
์ค๋ ๋ ๋คํ๋ฅผ ์ฌ์ฉํ๋ฉด ์ค๋ ๋๊ฐ ํ์ฌ ์ํ ์ค์ธ ์์
์ ํ์ธํ ์ ์์ต๋๋ค. ์ด์ ์ฒด์ ์ ๋ฐ๋ผ ์ค๋ ๋ ๋คํ๋ฅผ ์ป๋ ๋ฐฉ๋ฒ์๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ต๋๋ค. Windows์์๋ ctrl + Break ์กฐํฉ์ ์ฌ์ฉํ ์ ์๊ณ , Linux์์๋ kill -3 ๋ช
๋ น์ ์ฌ์ฉํ ์ ์์ต๋๋ค. jstack ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ์ด๋ ํ๋ก์ธ์ค ID์์ ์๋ํ๋ฉฐ ๋ค๋ฅธ jps ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ธํ ์ ์์ต๋๋ค.
-
์ค๋ ๋์ ์คํ ํฌ๊ธฐ๋ฅผ ์ ์ดํ๋ โโ๋ฐ ์ฌ์ฉ๋๋ JVM ๋งค๊ฐ๋ณ์๋ ๋ฌด์์ ๋๊น?
์ด๋ Java์์ ์ค๋ ๋ ์คํ์ ํฌ๊ธฐ๋ฅผ ์ ์ดํ๋ โโ๋ฐ ์ฌ์ฉ๋๋ ๊ฐ๋จํ -Xss ๋งค๊ฐ๋ณ์ ์ค ํ๋์
๋๋ค.
-
๋๊ธฐํ์ ReentrantLock์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น?
์ํธ ๋ฐฐ์ ๋ฅผ ๋ฌ์ฑํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๋๊ธฐํ๋ ํค์๋๋ฅผ ํตํ๋ ๊ฒ์ด์์ง๋ง ๋ฉ์๋๋ ์ฝ๋ ๋ธ๋ก ์ด์์ผ๋ก ์ ๊ธ์ ํ์ฅํ ์ ์๋ ๋ฑ ๋ช ๊ฐ์ง ๋จ์ ์ด ์์ต๋๋ค. Java 5๋ Lock ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋ณด๋ค ์ธ๋ถ์ ์ธ ์ ์ด๋ฅผ ์ ๊ณตํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ReentrantLock์ ์์์ ๋ชจ๋ํฐ์ ๋์ผํ ๊ธฐ๋ณธ ๋์ ๋ฐ ์๋ฏธ ์ฒด๊ณ๋ฅผ ๊ฐ์ถ ์ ๊ธ์ ์ ๊ณตํ๋ ์ผ๋ฐ์ ์ธ ์ ๊ธ ๊ตฌํ์ผ๋ก, ๋๊ธฐํ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌ์ฑ๋์ง๋ง ํฅ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
-
3๊ฐ์ ์ค๋ ๋ T1, T2 ๋ฐ T3์ด ์ฃผ์ด์ง๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ์ํ์ค T1, T2, T3์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
์ผ๊ด์ฑ์ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๋ฌ์ฑํ ์ ์์ง๋ง ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์คํ์ ๋ง์ณค์ ๋ ๊ฐ๋จํ Join() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ ๋๋ฅผ ์์ํ ์ ์์ต๋๋ค. ์ฃผ์ด์ง ์ํ์ค๋ฅผ ๊ตฌํํ๋ ค๋ฉด ๋ง์ง๋ง ์ค๋ ๋๋ฅผ ๋จผ์ ์์ํ ๋ค์ Join() ๋ฉ์๋๋ฅผ ์ญ์์ผ๋ก ํธ์ถํด์ผ ํฉ๋๋ค. ์ฆ, T3๋ T2.join์ ํธ์ถํ๊ณ T2๋ T1.join์ ํธ์ถํ๋ฏ๋ก T1์ด ๋จผ์ ์๋ฃ๋๊ณ T3์ด ๋ง์ง๋ง์ ์๋ฃ๋ฉ๋๋ค. .
-
ํญ๋ณต ๋ฐฉ๋ฒ์ ๋ฌด์์ ํฉ๋๊น?
์๋ณด ๋ฐฉ๋ฒ์ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์คํ๋ ์ ์๋๋ก ์ค๋ ๋์ CPU๋ฅผ ํฌ๊ธฐํ๋๋ก ์์ฒญํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์
๋๋ค. ์ด๋ ์ ์ ๋ฐฉ๋ฒ์ด๋ฉฐ ํ์ฌ ์ค๋ ๋๊ฐ ํ๋ก์ธ์๋ฅผ ํฌ๊ธฐํ๋๋ก ๋ณด์ฅํ ๋ฟ, ์ด๋ ์ค๋ ๋ ์คํ์ผ๋ก ์ด๋ํ ์ง๋ ๊ฒฐ์ ํ์ง ์์ต๋๋ค.
-
ConcurrentHashMap์ ๋์์ฑ ์์ค์ ๋ฌด์์ ๋๊น?
ConcurrentHashMap์ ์ค์ ๋งต์ ์น์
์ผ๋ก ๋ถํ ํ์ฌ ํ์ฅ์ฑ๊ณผ ์ค๋ ๋ ์์ ์ฑ์ ๋ฌ์ฑํฉ๋๋ค. ์ด๋ฌํ ๋ถ๋ฆฌ๋ ๋ณ๋ ฌ์ฑ ์์ค์ ์ฌ์ฉํ์ฌ ๋ฌ์ฑ๋ฉ๋๋ค. ์ด๋ ConcurrentHashMap ์์ฑ์์ ์ ํ์ ๋งค๊ฐ๋ณ์์ด๋ฉฐ ๊ธฐ๋ณธ๊ฐ์ 16์
๋๋ค.
-
์ธ๋งํฌ์ด๋ ๋ฌด์์ ๋๊น?
์ธ๋งํฌ์ด๋ ์๋ก์ด ์ ํ์ ๋๊ธฐํ ์ฅ์น์
๋๋ค. ์ด๊ฒ์ ์นด์ดํฐ๊ฐ ์๋ ์ธ๋งํฌ์ด์
๋๋ค. ๊ฐ๋
์ ์ผ๋ก ์ธ๋งํฌ์ด๋ ์ผ๋ จ์ ๊ถํ์ ์ ์ดํฉ๋๋ค. ๊ฐ acquire()๋ ํ์ํ ๊ฒฝ์ฐ ๊ถํ์ ์ฌ์ฉํ ์ ์๊ธฐ ์ ์ ์ฐจ๋จํ ๋ค์ ์ด๋ฅผ ํ๋ํฉ๋๋ค. ๊ฐ release()๋ ๊ถํ์ ์ถ๊ฐํ์ฌ ์ ์ฌ์ ์ผ๋ก ์ฐจ๋จ ํ๋์๋ฅผ ํด์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ์ค์ ๊ถํ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค. ์ธ๋งํฌ์ด๋ ๋จ์ํ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฐ์๋ฅผ ์ ์ฅํ๊ณ ๊ทธ์ ๋ฐ๋ผ ์๋ํฉ๋๋ค. ์ธ๋งํฌ์ด๋ ํ๋ง๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ฐ๊ฒฐ๊ณผ ๊ฐ์ด ์ ํ๋ ์๋์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฐ๋น์ผ ๋ฆฌ์์ค๋ฅผ ๋ณดํธํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
-
์ค๋ ๋ ํ ๋๊ธฐ์ด์ด ์ด๋ฏธ ๊ฐ๋ ์ฐจ์ ์์ ์ ์ ์ถํ๋ฉด ์ด๋ป๊ฒ ๋๋์?
์ค๋ ๋ ํ ๋๊ธฐ์ด์ด ๊ฐ๋ ์ฐจ๋ฉด ์ ์ถ๋ ์์
์ด "๊ฑฐ๋ถ"๋ฉ๋๋ค. ThreadPoolExecutor์ submit() ๋ฉ์๋๋ RejectedExecutionException์ ๋ฐ์์ํจ ํ RejectedExecutionHandler๊ฐ ํธ์ถ๋ฉ๋๋ค.
-
์ค๋ ๋ ํ์์ submit()๊ณผ excute() ๋ฉ์๋์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น?
๋ ๋ฐฉ๋ฒ ๋ชจ๋ ์ค๋ ๋ ํ์ ์์
์ ์ ์ถํ๋ ๋ฐฉ๋ฒ์ด์ง๋ง ์ฝ๊ฐ์ ์ฐจ์ด๊ฐ ์์ต๋๋ค. Execute(Runnable ๋ช
๋ น)๋ Executor ์ธํฐํ์ด์ค์ ์ ์๋์ด ์์ผ๋ฉฐ ์์ผ๋ก ์ฃผ์ด์ง ์์
์ ์คํํ์ง๋ง ๋ ์ค์ํ ๊ฒ์ ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์๋๋ค๋ ๊ฒ์
๋๋ค. ๋ฐ๋ฉด submit()์ ์ค๋ฒ๋ก๋๋ ๋ฉ์๋๋ก, Runnable ๋ฐ Callable ์์
์ ํ์ฉํ๊ณ ์คํ์ ์ทจ์ํ๊ฑฐ๋ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ Future ๊ฐ์ฒด๋ฅผ ๋ฐํํ ์ ์์ต๋๋ค. ์ด ๋ฉ์๋๋ Executor ์ธํฐํ์ด์ค๋ฅผ ์์ํ๋ ExecutorService ์ธํฐํ์ด์ค์ ์ ์๋์ด ์์ผ๋ฉฐ ThreadPoolExecutor ๋๋ ScheduledThreadPoolExecutor์ ๊ฐ์ ๊ฐ ์ค๋ ๋ ํ ํด๋์ค๋ ์ด๋ฌํ ๋ฉ์๋๋ฅผ ์์ํฉ๋๋ค.
-
์ฐจ๋จ ๋ฐฉ๋ฒ์ด๋ ๋ฌด์์ ๋๊น?
์ฐจ๋จ ๋ฉ์๋๋ ์์
์ด ์๋ฃ๋ ๋๊น์ง ์ฐจ๋จํ๋ ๋ฉ์๋์
๋๋ค. ์๋ฅผ ๋ค์ด ServerSocket accept() ๋ฉ์๋๋ ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ฒฐ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋์ ์ฐจ๋จํฉ๋๋ค. ์ฌ๊ธฐ์ ์ฐจ๋จ์ด๋ ์์
์ด ์๋ฃ๋ ๋๊น์ง ์ ์ด๊ฐ ํธ์ถ ๋ฉ์๋๋ก ๋ฐํ๋์ง ์์์ ์๋ฏธํฉ๋๋ค. ๋ฐ๋ฉด์ ์์
์ด ์๋ฃ๋๊ธฐ ์ ์ ์๋ฃ๋๋ ๋น๋๊ธฐ์ ๋๋ ๋น์ฐจ๋จ ๋ฉ์๋๊ฐ ์์ต๋๋ค.
-
์ค์ ์ค๋ ๋๋ ์์ ํ๊ฐ์?
๊ฐ๋จํ ๋งํด์, Swing์ ์ค๋ ๋๋ก๋ถํฐ ์์ ํ์ง ์์ต๋๋ค. ํ์ง๋ง ๋ฉด์ ๊ด์ด ๋ฌป์ง ์๋๋ผ๋ ๊ทธ๊ฒ์ด ์๋ฏธํ๋ ๋ฐ๋ฅผ ์ค๋ช
ํด์ผ ํฉ๋๋ค. Swing์ด ์ค๋ ๋๋ก๋ถํฐ ์์ ํ์ง ์๋ค๊ณ ๋งํ ๋ ์ผ๋ฐ์ ์ผ๋ก Swing์ ์ฌ๋ฌ ์ค๋ ๋์ ์ํด ์์ ๋ ์ ์๋ ๊ตฌ์ฑ์์๋ผ๋ ์ฌ์ค์ ์ฐธ์กฐํฉ๋๋ค. GUI ๊ตฌ์ฑ์์์ ๋ํ ๋ชจ๋ ๋ณ๊ฒฝ์ AWT ์ค๋ ๋์์ ์ด๋ฃจ์ด์ ธ์ผ ํ๋ฉฐ Swing์ ๊ทธ๋ฌํ ๋ณ๊ฒฝ์ ์์ฝํ๊ธฐ ์ํ ๋๊ธฐ์ ๋ฐ ๋น๋๊ธฐ์ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
-
InvokeAndWait์ InvokeLater์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น?
์ด๋ ๊ฐ๋ฐ์๊ฐ ์ด๋ฒคํธ ๊ด๋ฆฌ์ ์ค๋ ๋๊ฐ ์๋ ์ค๋ ๋์์ GUI ๊ตฌ์ฑ ์์๋ฅผ ์
๋ฐ์ดํธํ ์ ์๋๋ก ํ๋ ๋ ๊ฐ์ง Swing API ๋ฐฉ๋ฒ์
๋๋ค. InvokeAndWait()๋ ์งํ๋ฅ ํ์์ค๊ณผ ๊ฐ์ GUI ๊ตฌ์ฑ ์์๋ฅผ ๋๊ธฐ์ ์ผ๋ก ์
๋ฐ์ดํธํฉ๋๋ค. ์งํ๋ฅ ์ด ์ด๋ฃจ์ด์ง ๋๋ง๋ค ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํ๋๋ก ํ์์ค์ ์
๋ฐ์ดํธํด์ผ ํฉ๋๋ค. ๋ค๋ฅธ ์ค๋ ๋์์ ์งํ ์ํฉ์ ์ถ์ ํ๋ ๊ฒฝ์ฐ ํด๋น ๊ตฌ์ฑ ์์๋ฅผ ์
๋ฐ์ดํธํ๊ธฐ ์ํ ์ด๋ฒคํธ ๋์คํจ์ฒ ์ค๋ ๋๋ฅผ ํ ๋นํ๊ธฐ ์ํด InvokeAndWait()๋ฅผ ํธ์ถํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ informaLater()๋ ๊ตฌ์ฑ ์์๋ฅผ ์
๋ฐ์ดํธํ๊ธฐ ์ํ ๋น๋๊ธฐ ํธ์ถ์
๋๋ค.
-
์ค๋ ๋๋ก๋ถํฐ ์์ ํ Swing API ๋ฉ์๋๋ ๋ฌด์์ ๋๊น?
์ด ์ง๋ฌธ์ ๋ค์ Swing๊ณผ ์ค๋ ๋ ์์ ์ฑ์ ๊ดํ ๊ฒ์
๋๋ค. Swing ๊ตฌ์ฑ ์์๋ ์ค๋ ๋๋ก๋ถํฐ ์์ ํ์ง ์์ง๋ง ์ฌ๋ฌ ์ค๋ ๋์์ ์์ ํ๊ฒ ํธ์ถํ ์ ์๋ ๋ฉ์๋๊ฐ ์์ต๋๋ค. repaint() ๋ฐ revalidate()๊ฐ ์ค๋ ๋๋ก๋ถํฐ ์์ ํ๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง JTextComponent์ setText() ๋ฐ JTextArea์ insert() ๋ฐ Append() ๋ฉ์๋์ ๊ฐ์ ๋ค์ํ Swing ๊ตฌ์ฑ์์์ ๋ค๋ฅธ ๋ฉ์๋๊ฐ ์์ต๋๋ค.
-
๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
์ด ์ง๋ฌธ์ ๋ฉํฐ์ค๋ ๋ฉ ๋ฐ ๋์์ฑ๊ณผ ๊ด๋ จ์ด ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ผ ์ ์์ง๋ง ์ค์ ๋ก๋ ๊ทธ๋ ์ต๋๋ค. ๋ถ๋ณ์ฑ์ ์ด๋ฏธ ๋ณต์กํ ๋ณ๋ ฌ ์ฝ๋๋ฅผ ๋จ์ํํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๋ถ๋ณ ๊ฐ์ฒด๋ ๋๊ธฐํ ์์ด ์ ํ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์์๊ฒ ๋งค์ฐ ๋น์ฉ์ด ๋ง์ด ๋ญ๋๋ค. ๋ถํํ๊ฒ๋ Java์๋ ๊ฐ์ฒด๋ฅผ ๋ถ๋ณ์ผ๋ก ๋ง๋๋ @Immutable ์ฃผ์์ด ์์ต๋๋ค. ๊ฐ๋ฐ์๊ฐ ์ด์ฌํ ๋
ธ๋ ฅํด์ผ ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ค๋ฉด ์์ฑ์ ์ด๊ธฐํ, ์ค์ ์ ์์, ์ฐธ์กฐ ๋์ถ ์์, ๋ณ๊ฒฝ ๊ฐ๋ฅ ๊ฐ์ฒด์ ๋ณ๋ ๋ณต์ฌ๋ณธ ์ ์ฅ ๋ฑ ๊ธฐ๋ณธ ์ฌํญ์ ๋ฐ๋ผ์ผ ํฉ๋๋ค.
-
ReadWriteLock์ด๋ ๋ฌด์์ ๋๊น?
์ผ๋ฐ์ ์ผ๋ก ReadWriteLock์ ๋ณ๋ ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํ ์ ๊ธ ๊ตฌ๋ฌธ ๋ถ์ ๊ธฐ์ ์ ๊ฒฐ๊ณผ์
๋๋ค. ์ด๋ Java 5์ ์ถ๊ฐ๋ ์ธํฐํ์ด์ค์
๋๋ค. ํ ์์ ๊ด๋ จ ์ ๊ธ(์ฝ๊ธฐ ์์
์ฉ, ์ฐ๊ธฐ ์์
์ฉ)์์ ์๋ํฉ๋๋ค. ํ๋
๊ธฐ ์ ๊ธ์ ์์ฑ์๊ฐ ์์ ๋๊น์ง ์ฌ๋ฌ ์ฝ๊ธฐ ์ค๋ ๋์ ์ํด ๋์์ ์ ์ง๋ ์ ์์ต๋๋ค. ์ฐ๊ธฐ ์ ๊ธ์ ๋
์ ์ ์
๋๋ค. ์ํ๋ ๊ฒฝ์ฐ ๊ท์น ์ธํธ๋ก ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ฑฐ๋ ์ต๋ 65535๊ฐ์ ์ฌ๊ท ์ฐ๊ธฐ ์ ๊ธ๊ณผ 65535๊ฐ์ ์ฝ๊ธฐ ์ ๊ธ์ ์ง์ํ๋ ReentrantReadWriteLock์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
-
๋น์ง ์คํ์ด๋ ๋ฌด์์ ๋๊น?
Busy Spin์ ํ๋ก๊ทธ๋๋จธ๊ฐ ํน์ ์กฐ๊ฑด์์ ์ค๋ ๋๋ฅผ ๊ฐ์ ๋ก ๋๊ธฐ์ํค๋ ๋ฐ ์ฌ์ฉํ๋ ๊ธฐ์ ์
๋๋ค. ํ๋ก์ธ์ ์ ์ด๊ถ์ ์๋ํ๋ ์ ํต์ ์ธ ๋ฐฉ๋ฒ์ธ wait(), sleep() ๋๋ Yield()์ ๋ฌ๋ฆฌ ์ด ๋ฐฉ๋ฒ์ ํ๋ก์ธ์๋ฅผ ์๋ํ์ง ์๊ณ ๋จ์ํ ๋น ๋ฃจํ๋ฅผ ์คํํฉ๋๋ค. ์ ์ด๋ฐ ์ผ์ ํ๊ฒ ์ต๋๊น? ํ๋ก์ธ์ ์บ์๋ฅผ ์ ์ฅํฉ๋๋ค. ๋ฉํฐ ์ฝ์ด ์์คํ
์์๋ ์ผ์ ์ค๋จ๋ ์ค๋ ๋๊ฐ ๋ค๋ฅธ ์ฝ์ด์์ ๊ณ์ ์คํ๋ ์ ์์ผ๋ฉฐ ์ด๋ ์บ์ ์ฌ๊ตฌ์ถ์ ์๋ฏธํฉ๋๋ค. ๋น์ฉ์ด ๋ง์ด ๋๋ ์ฌ๊ตฌ์ถ์ ํผํ๊ธฐ ์ํด ํ๋ก๊ทธ๋๋จธ๋ ๋ฐ์ ์คํ์ ์ฌ์ฉํ์ฌ ๋๊ธฐ ์๊ฐ์ ์ค์ด๋ ๊ฒ์ ์ ํธํฉ๋๋ค.
-
ํ๋ฐ์ฑ ๋ณ์์ ์์ ๋ณ์์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น?
์ด๊ฒ์ ๋งค์ฐ ํฅ๋ฏธ๋ก์ด ์ง๋ฌธ์
๋๋ค. ์ฒ์์๋ ํ๋ฐ์ฑ ๋ฐ ์์ ๋ณ์๊ฐ ๋งค์ฐ ์ ์ฌํด ๋ณด์ด์ง๋ง ์ฌ์ ํ ๋ค๋ฆ
๋๋ค. Volatile ๋ณ์๋ ํ์ ์ฐ๊ธฐ ์ ์ ์ฐ๊ธฐ๊ฐ ๋ฐ์ํ๋ค๋ ์ฌ์ ๋ฐ์ ๋ณด์ฅ์ ์ ๊ณตํ์ง๋ง ์์์ฑ์ ๋ณด์ฅํ์ง๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, count++ ์ฐ์ฐ์ ๋จ์ํ count๊ฐ ํ๋ฐ์ฑ์ผ๋ก ์ ์ธ๋์๊ธฐ ๋๋ฌธ์ ์์์ฑ์ด ๋์ง ์์ต๋๋ค. ๋ฐ๋ฉด์ AtomicInteger ํด๋์ค๋ ์ด๋ฌํ ๋ณต์กํ ์์
์ ์์์ ์ผ๋ก ์ํํ๋ ์์ ๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด getAndIncrement()๋ ์ฆ๊ฐ ์ฐ์ฐ์๋ฅผ ์์์ ์ผ๋ก ๋์ฒดํ๋ฏ๋ก ํ์ฌ ๊ฐ์ ์์์ ์ผ๋ก 1์ฉ ์ฆ๊ฐ์ํค๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ๋ฐ์ดํฐ ์ ํ์ ๋ํ ์์ ๋ฒ์ ๋ ์์ต๋๋ค.
-
์ค๋ ๋๊ฐ ๋๊ธฐํ๋ ๋ธ๋ก์์ ์์ธ๋ฅผ ๋ฐ์์ํค๋ฉด ์ด๋ป๊ฒ ๋ฉ๋๊น?
์ด๊ฒ์ ์ผ๋ฐ Java ํ๋ก๊ทธ๋๋จธ๋ฅผ ์ํ ๋ ๋ค๋ฅธ ํธ๋ฆญ ์ง๋ฌธ์
๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์คํ์ ์๋ฃํ๊ฑฐ๋ ๊ฐ์๊ธฐ ์์ธ๋ฅผ ๋ฐ์์์ผ ๋๊ธฐํ๋ ๋ธ๋ก์ ์ข
๋ฃํ๋ ๋ฐฉ๋ฒ์ ๊ด๊ณ์์ด ์ค๋ ๋๋ ๋๊ธฐํ๋ ๋ธ๋ก์ ๋ค์ด๊ฐ ๋ ํ๋ํ ์ ๊ธ์ ํด์ ํฉ๋๋ค. ์ด๊ฒ์ด ์ผ๋ฐ์ ์ผ๋ก finally ๋ธ๋ก์์ ์ ๊ธ์ ํด์ ํ์ฌ ์ ๊ธ์ ํด์ ํ ๋ ํน๋ณํ ์ฃผ์๊ฐ ํ์ํ ์ธํฐํ์ด์ค๋ณด๋ค ๋๊ธฐํ๋ ์ ๊ธ ๋ธ๋ก์ ์ ํธํ๋ ์ด์ ์ค ํ๋์
๋๋ค.
-
์ฑ๊ธํค์ ์ด์ค ํ์ธ ์ ๊ธ์ด๋ ๋ฌด์์ ๋๊น?
์ด๊ฒ์ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ๋ฉด์ ์ง๋ฌธ ์ค ํ๋์ด์ง๋ง, ์ธ๊ธฐ์๋ ๋ถ๊ตฌํ๊ณ ํ๋ณด์๊ฐ ์ด์ ๋ตํ ํ๋ฅ ์ ๊ธฐ๊ปํด์ผ 50%์
๋๋ค. ์ ๋ฐ์ ์๊ฐ์ ์ฝ๋ ์์ฑ์ ์คํจํ๊ณ ๋๋จธ์ง ์ ๋ฐ์ Java 1.5์์ ์ฝ๋๊ฐ ์ด๋ป๊ฒ ์์๋๊ณ ์์ ๋์๋์ง ์ค๋ช
ํ๋ ๋ฐ ์คํจํฉ๋๋ค. ์ด๋ ์ฑ๊ธํค ์ธ์คํด์ค๊ฐ ์ฒ์ ์ธ์คํด์คํ๋ ๋๋ง ์ฐจ๋จํ์ฌ ์ฑ๋ฅ์ ์ต์ ํํ๋ ค๊ณ ์๋ํ๋ ์ค๋ ๋๋ก๋ถํฐ ์์ ํ ์ฑ๊ธํค์ ์์ฑํ๋ ์ค๋๋ ๋ฐฉ๋ฒ์ด์ง๋ง JDK 1.4์์ ์์๋์๋ค๋ ์ฌ์ค๊ณผ ๋ณต์ก์ฑ์ผ๋ก ์ธํด ๊ฐ์ธ์ ์ผ๋ก ๋ง์์ ๋ค์ง ์์ต๋๋ค. ๊ทธ๊ฒ. ๊ทธ๋๋ ์ด ์ ๊ทผ ๋ฐฉ์์ ์ ํธํ์ง ์๋๋ผ๋ ์ธํฐ๋ทฐ ๊ด์ ์์ ์์๋๋ฉด ์ ์ฉํฉ๋๋ค.
-
์ค๋ ๋๋ก๋ถํฐ ์์ ํ ์ฑ๊ธํค์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
์ด ์ง๋ฌธ์ ์ด์ ์ง๋ฌธ์ ๋ณด์ํฉ๋๋ค. ์ด์ค ํ์ธ ์ ๊ธ์ด ๋ง์์ ๋ค์ง ์๋๋ค๊ณ ๋งํ๋ฉด ๋ฉด์ ๊ด์ ์ค๋ ๋๋ก๋ถํฐ ์์ ํ ์ฑ๊ธํค์ ๋ง๋๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ํด ์ง๋ฌธํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋์ค ๋ก๋ฉ ๋ฐ ์ ์ ๋ณ์ ์ด๊ธฐํ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ์ฑ๊ธํค์ ์ธ์คํด์คํํ๊ฑฐ๋ ๊ฐ๋ ฅํ ์ด๊ฑฐํ ์ ํ์ ํ์ฉํ ์ ์์ต๋๋ค.
-
๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ์์ ๋ฐ๋ฅด๋ ์ธ ๊ฐ์ง ๊ด์ต์ ๋์ดํด ๋ณด์ธ์.
์ฑ๋ฅ, ๋๋ฒ๊น
๋ฐ ์ง์์ ๋์์ด ๋๋ ๋ณ๋ ฌ ์ฝ๋๋ฅผ ์์ฑํ ๋ ๋ฐ๋ผ์ผ ํ ํน์ ๊ท์น์ด ์๋ค๊ณ ๋ฏฟ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์ ๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ์ง๋ฌธ์
๋๋ค. ๋ค์์ ๋ชจ๋ Java ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ฐ๋ผ์ผ ํ๋ค๊ณ ์๊ฐํ๋ 3๊ฐ์ง ์ต๊ณ ์ ๊ท์น์
๋๋ค.
- ํญ์ ์ค๋ ๋์ ์๋ฏธ ์๋ ์ด๋ฆ์ ์ง์ ํ์ธ์. ๋ณ๋ ฌ ์ฝ๋์์ ๋ฒ๊ทธ๋ฅผ ์ฐพ๊ฑฐ๋ ์์ธ๋ฅผ ์ถ์ ํ๋ ๊ฒ์ ๋ค์ ์ด๋ ค์ด ์์ ์ ๋๋ค. OrderProcessor, QuoteProcessor ๋๋ TradeProcessor๋ Thread-1๋ณด๋ค ํจ์ฌ ๋ซ์ต๋๋ค. ์ค๋ ๋-2 ๋ฐ ์ค๋ ๋-3. ์ด๋ฆ์ ์ค๋ ๋๊ฐ ์ํํ๋ ์์ ์ ๋ฐ์ํด์ผ ํฉ๋๋ค. ๋ชจ๋ ์ฃผ์ ํ๋ ์์ํฌ์ ์ฌ์ง์ด JDK๋ ์ด ๊ท์น์ ๋ฐ๋ฆ ๋๋ค.
- ์ฐจ๋จ ๋ฐฉ์ง ๋๋ ๋๊ธฐํ ๋ฒ์ ์ค์ด๊ธฐ ์ฐจ๋จ์๋ ๋น์ฉ์ด ๋ง์ด ๋ค๊ณ ์ปจํ ์คํธ ์ ํ์๋ ํจ์ฌ ๋ ๋ง์ ๋น์ฉ์ด ๋ญ๋๋ค. ๊ฐ๋ฅํ ํ ๋๊ธฐํ ๋ฐ ์ฐจ๋จ์ ํผํ๋ ค๊ณ ํ๋ฉด ์ค์ํ ์น์ ์ด ํ์ํ ์ต์ํ์ผ๋ก ์ค์ด๋ญ๋๋ค. ์ด๊ฒ์ด ๋ด๊ฐ ์๊ฐ ์ ํ ๋ฐฉ๋ฒ๋ณด๋ค ์๊ฐ ์ ํ ๋ฐฉ๋ฒ์ ์ ํธํ๋ ์ด์ ์ ๋๋ค. ์ฐจ๋จ ๋ฒ์๋ฅผ ์๋ฒฝํ๊ฒ ์ ์ดํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ๋๊ธฐํ ์ฅ์น์ ๋๊ธฐ ๋ฐ ์๋ฆผ ์ฌ์ด์์ ๋๊ธฐํ ์ฅ์น๋ฅผ ์ ํํ์ธ์ ์ฒซ์งธ, CountDownLatch, Semaphore, CyclicBarrier ๋๋ Exchanger์ ๊ฐ์ ๋๊ธฐํ ์ฅ์น๋ ์ฝ๋ฉ์ ๋จ์ํํฉ๋๋ค. ๋๊ธฐ ๋ฐ ์๋ฆผ์ ์ฌ์ฉํ์ฌ ๋ณต์กํ ์ ์ด ํ๋ฆ์ ๊ตฌํํ๋ ๊ฒ์ ๋งค์ฐ ์ด๋ ต์ต๋๋ค. ๋์งธ, ์ด๋ฌํ ํด๋์ค๋ ์ ๊ณ ์ต๊ณ ์ ์ ๋ฌธ๊ฐ๊ฐ ์์ฑํ๊ณ ์ ์ง ๊ด๋ฆฌํ๋ฉฐ ํฅํ JDK ๋ฆด๋ฆฌ์ค์์๋ ์ต์ ํ๋๊ฑฐ๋ ๋ ๋์ ์ฝ๋๋ก ๋์ฒด๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ๊ณ ๊ธ ๋๊ธฐํ ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ๋ชจ๋ ์ด์ ์ ์๋์ผ๋ก ์ป์ ์ ์์ต๋๋ค.
- ๋์์์ง๊ณผ ๋๊ธฐํ์์ง ์ค ๋์์์ง ์ ํ ์ด๊ฒ์ ๋ฐ๋ฅด๊ธฐ ์ฝ๊ณ ํํ์ ์ป์ ์ ์๋ ๋ ๋ค๋ฅธ ๊ฐ๋จํ ๊ท์น์ ๋๋ค. ๋์ ์ปฌ๋ ์ ์ ๋๊ธฐํ๋ ์ปฌ๋ ์ ๋ณด๋ค ํ์ฅ์ฑ์ด ๋ฐ์ด๋๋ฏ๋ก ๋ณ๋ ฌ ์ฝ๋๋ฅผ ์์ฑํ ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ฐ๋ผ์ ๋ค์์ ์ง๋๊ฐ ํ์ํ ๋๋ Hashtable์ ์๊ฐํ๊ธฐ ์ ์ ConcurrentHashMap์ ์๊ฐํด ๋ณด์ธ์.
-
์ค๋ ๋๋ฅผ ๊ฐ์ ๋ก ์์ํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
๊ฐ๋น์ง ์์ง์ ๊ฐ์ ๋ก ์คํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง๋ฌธ์
๋๋ค. ๊ฐ๋จํ ๋งํด์, ๋ฌผ๋ก System.gc()๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ๋ง๋ค ์๋ ์์ง๋ง ์๋ฌด ๊ฒ๋ ๋ณด์ฅํ์ง๋ ์์ต๋๋ค. Java์์ ์ค๋ ๋๋ฅผ ๊ฐ์ ๋ก ์์ํ๋ ๋ฐฉ๋ฒ์ ์ ํ ์์ต๋๋ค. ์ด๋ ์ค๋ ๋ ์ค์ผ์ค๋ฌ์ ์ํด ์ ์ด๋๋ฉฐ Java๋ ์ด๋ฅผ ์ ์ดํ API๋ฅผ ์ ๊ณตํ์ง ์์ต๋๋ค. Java์ ์ด ๋ถ๋ถ์ ์ฌ์ ํ โโ์์์ ์
๋๋ค.
-
Fork/Join ํ๋ ์์ํฌ๋ ๋ฌด์์ ๋๊น?
JDK 7์ ๋์
๋ Fork/Join ํ๋ ์์ํฌ๋ ๊ฐ๋ฐ์๊ฐ ์ต์ ์๋ฒ์ ๋ค์ค ํ๋ก์ธ์๋ฅผ ํ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ๊ฐ๋ ฅํ ์ ํธ๋ฆฌํฐ์
๋๋ค. ์ด๋ ์์ ์
์๋ก ๋ฐ๋ณต์ ์ผ๋ก ๋ถํด๋ ์ ์๋ ์์
์ ์ํด ์ค๊ณ๋์์ต๋๋ค. ๋ชฉํ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ์ปดํจํ
์ฑ๋ฅ์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฑ๋ฅ์ ๋์ด๋ ๊ฒ์
๋๋ค. ์ด ํ๋ ์์ํฌ์ ์ค์ํ ์ฅ์ ์ค ํ๋๋ ์์
๋์ฉ ์๊ณ ๋ฆฌ์ฆ(์์
- ์์
๋ฐ ๋์ฉ - ๋์ฉ)์ ์ฌ์ฉํ๋ค๋ ๊ฒ์
๋๋ค. ์์
์ด ๋ถ์กฑํ ์์
์ ์ค๋ ๋๋ ์ฌ์ ํ ์ฌ์ฉ ์ค์ธ ๋ค๋ฅธ ์ค๋ ๋์์ ์์
์ ํ์น ์ ์์ต๋๋ค.
-
wait() ํธ์ถ๊ณผ sleep() ํธ์ถ์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น?
๋๊ธฐ ๋ฐ ์ ์ ๋ชจ๋๋ ๋ชจ๋ Java ์ ํ๋ฆฌ์ผ์ด์
์์ ์ผ์ข
์ ์ผ์ ์ค์ง๋ฅผ ๋ํ๋ด์ง๋ง ์๋ก ๋ค๋ฅธ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋ ์ฅ์น์
๋๋ค. ๋๊ธฐ๋ ๋ด๋ถ ์ค๋ ๋ ํต์ ์ ์ฌ์ฉ๋๋ฉฐ, ๋๊ธฐ ์กฐ๊ฑด์ด true์ด๋ฉด ์ ๊ธฐ๊ณ , ๋ค๋ฅธ ์ค๋ ๋์ ์์
์ผ๋ก ์ธํด ๋๊ธฐ ์กฐ๊ฑด์ด false๊ฐ ๋๋ฉด ์๋ฆผ์ ๊ธฐ๋ค๋ฆฝ๋๋ค. ๋ฐ๋ฉด์ sleep() ๋ฉ์๋๋ ๋จ์ํ ํ๋ก์ธ์๋ฅผ ํฌ๊ธฐํ๊ฑฐ๋ ์ง์ ๋ ์๊ฐ ๋์ ํ์ฌ ์ค๋ ๋์ ์คํ์ ์ค์งํฉ๋๋ค. sleep()์ ํธ์ถํด๋ ํ์ฌ ์ค๋ ๋๊ฐ ๋ณด์ ํ ์ ๊ธ์ด ํด์ ๋์ง ์์ต๋๋ค.
๋ฒ์ญ: ์ค๋ ๋๋ณ ์์ 50๊ฐ ์ธํฐ๋ทฐ ์ง๋ฌธ. 2 ๋ถ.
์ ์
์, ์๋ จ๋ ํ๋ก๊ทธ๋๋จธ๋ฅผ ์ํ ์์ 50๊ฐ์ง Java ์ค๋ ๋ ์ธํฐ๋ทฐ ์ง๋ฌธ ๋ต๋ณ ์๋ณธ ๊ธฐ์ฌ ๋ฒ์ญ์ ๋ ๋ฒ์งธ ๋ถ๋ถ์
๋๋ค .
์ฒซ ๋ฒ์งธ ๋ถ๋ถ.
GO TO FULL VERSION