"์๋ , ์๋ฏธ๊ณ !"
"์๋ , ๋ฆฌ์!"
"Object ํด๋์ค์ wait , notify ๋ฐ notifyAll ๋ฉ์๋๋ฅผ ์๊ฐํ๊ฒ ์ต๋๋ค ."
"์ค๋ ์ฐ๋ฆฌ๋ ๊ทธ๋ค๊ณผ ์นํด์ง ๊ฒ์ ๋๋ค. ํ์ง๋ง ๋์ค์ ๋์์์ ์ด๊ฒ์ ๋ ๋ง์ ์๊ฐ์ ํ ์ ํ ๊ฒ์ ๋๋ค."
"์ข์์."
"์ด๋ฌํ ๋ฐฉ๋ฒ์ ์ค๋ ๋ ๋๊ธฐํ ๋ฉ์ปค๋์ฆ์ ์ผ๋ถ๋ก ๋ฐ๋ช ๋์์ต๋๋ค."
"Java์๋ ๋ค๋ฅธ ์ค๋ ๋์์ ๊ณต์ ๋ฆฌ์์ค(๊ฐ์ฒด)์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ์ดํ๊ธฐ ์ํ ๊ธฐ๋ณธ ์ ๊ณต ๋ฉ์ปค๋์ฆ์ด ์์์ ์๊ธฐ์์ผ ๋๋ฆฌ๊ฒ ์ต๋๋ค. ์ค๋ ๋๋ ๊ฐ์ฒด๊ฐ ์ฌ์ฉ ์ค์์ ์ ์ธํ ์ ์์ผ๋ฉฐ ๋ค๋ฅธ ์ค๋ ๋๋ ์ฌ์ฉ ์ค์ธ ๊ฐ์ฒด๊ฐ ํด์ ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค. "
"๊ธฐ์ต๋๋ค์. ๋๊ธฐํ๋ ํค์๋๋ฅผ ์ฌ์ฉํด์ ๊ทธ๋ ๊ฒ ํ์ธ์ ."
"๋ง์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค."
public void print()
{
Object monitor = getMonitor();
synchronized(monitor)
{
System.out.println("text");
}
}
"์ด๋ป๊ฒ ์๋ํ๋์ง ๊ธฐ์ตํด?"
"์. ๋ ์ค๋ ๋๊ฐ ๋์์ print() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ๊ทธ ์ค ํ๋๊ฐ synchronized๋ผ๊ณ ํ์๋ ๋ธ๋ก์ ์ง์ ํ๊ณ ๋ชจ๋ํฐ๋ฅผ ์ ๊ทธ๋ฏ๋ก ๋ ๋ฒ์งธ ์ค๋ ๋๊ฐ ๋ชจ๋ํฐ๊ฐ ํด์ ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ฒ ๋ฉ๋๋ค."
"๋ง์ต๋๋ค. ์ค๋ ๋๊ฐ ๋๊ธฐํ๋จ์ด๋ผ๋ ๋ผ๋ฒจ์ด ๋ถ์ ๋ธ๋ก์ ๋ค์ด๊ฐ๋ฉด ๋ชจ๋ํฐ ๊ฐ์ฒด๋ ์ฌ์ฉ ์ค์ธ ๊ฒ์ผ๋ก ํ์๋๊ณ ๋ค๋ฅธ ์ค๋ ๋๋ ๋ชจ๋ํฐ ๊ฐ์ฒด๊ฐ ํด์ ๋ ๋๊น์ง ๊ฐ์ ๋ก ๋๊ธฐํ๊ฒ ๋ฉ๋๋ค. ๋์ผํ ๋ชจ๋ํฐ ๊ฐ์ฒด๋ฅผ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ๋ถ๋ถ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. "
"๊ทธ๋์ ๋ ์ด๋ฆ ๋ชจ๋ํฐ๋ฅผ ์ ํํ ์ด์ ๋ ๋ฌด์์ ๋๊น?"
"๋ชจ๋ํฐ๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ ์ค ๋๋ ๋น์ด ์๋ ์ํ๋ฅผ ์ ์ฅํ๋ ๊ฐ์ฒด๋ผ๊ณ ํฉ๋๋ค."
"๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ๋๊ธฐ ๋ฐ ์๋ฆผ ๋ฐฉ๋ฒ์ด ์๋ํ๋ ๊ณณ์ ๋๋ค."
"์ฌ์ค, ์ด๊ฒ๋ค์ ์ ๋ง ์ ์ผํ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋๋ค. ๋๋จธ์ง๋ ์ด๋ฌํ ๋ฐฉ๋ฒ์ ์ ์์ผ ๋ฟ์ ๋๋ค."
"์ด์ ๋๊ธฐ ๋ฐฉ๋ฒ์ด ๋ฌด์์ด๊ณ ์ ํ์ํ์ง ๋จธ๋ฆฌ๋ฅผ ๊ฐ์๋ด ์๋ค . "
"๋๋๋ก ํ๋ก๊ทธ๋จ์์ ์ค๋ ๋๊ฐ ๋๊ธฐํ๋ ์ฝ๋ ๋ธ๋ก์ ๋ค์ด๊ฐ ๋ชจ๋ํฐ๋ฅผ ์ ๊ทธ์ง๋ง ์ผ๋ถ ๋ฐ์ดํฐ๊ฐ ๋๋ฝ๋์ด ๊ณ์ ์งํํ ์ ์๋ ์ํฉ์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ฒ๋ฆฌํด์ผ ํ๋ ํ์ผ์ ๋ค์ด๋ก๋๊ฐ ์๋ฃ๋์ง ์์๊ฑฐ๋ ๊ทธ๋ฐ ๊ฒ."
"ํ์ผ์ด ๋ค์ด๋ก๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆด ์ ์์ต๋๋ค. ๋ฃจํ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ธํ ์ ์์ต๋๋ค. ํ์ผ์ด ์์ง ๋ค์ด๋ก๋๋์ง ์์ ๊ฒฝ์ฐ 1์ด ์ ๋ ์ ์๊ณ ๋ค์ด๋ก๋๋ ๋๊น์ง ๋ค์ ํ์ธํ์ญ์์ค."
"์ด ๊ฐ์:"
while(!file.isDownloaded())
{
Thread.sleep(1000);
}
processFile(file);
"ํ์ง๋ง ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ์ด๋ฌํ ์ ํ์ ๋๊ธฐ๋ ๋น์ฉ์ด ๋๋ฌด ๋ง์ด ๋ญ๋๋ค. ์ฐ๋ฆฌ ์ค๋ ๋๊ฐ ๋ชจ๋ํฐ๋ฅผ ์ ๊ฐ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ค๋ ๋๋ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ด๋ฏธ ๊ฐ์ง๊ณ ์๋๋ผ๋ ๊ฐ์ ๋ก ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค."
" wait() ๋ฉ์๋๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฐ๋ช ๋์์ต๋๋ค. ์ด ๋ฉ์๋๋ ์ค๋ ๋๊ฐ ๋ชจ๋ํฐ๋ฅผ ํด์ ํ ๋ค์ ์ค๋ ๋๋ฅผ ยซ์ผ์ ์ค๋จยปํฉ๋๋ค.
"๋ชจ๋ํฐ๊ฐ ์ฌ์ฉ ์ค์ผ ๋๋ง(์ฆ, ๋๊ธฐํ๋ ๋ธ๋ก ๋ด๋ถ์์๋ง) ๋ชจ๋ํฐ ๊ฐ์ฒด์ ๋๊ธฐ ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ค๋ ๋๊ฐ ์ผ์์ ์ผ๋ก ์คํ์ ์ค์งํ๊ณ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์ฌ์ฉํ ์ ์๋๋ก ๋ชจ๋ํฐ๊ฐ ํด์ ๋ฉ๋๋ค."
"์ค๋ ๋๊ฐ ๋๊ธฐํ๋ ๋ธ๋ก์ ๋ค์ด๊ฐ ๋๊ธฐ๋ฅผ ํธ์ถํ์ฌ ๋ชจ๋ํฐ๋ฅผ ํด์ ํ๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์์ต๋๋ค ."
"๊ทธ๋ฌ๋ฉด ๋ ๋ฒ์งธ ์ค๋ ๋๊ฐ ๋ค์ด์ ์ผ์ ์ค๋จ๋๊ณ ์ธ ๋ฒ์งธ ์ค๋ ๋ ๋ฑ์ด ๊ณ์๋ฉ๋๋ค."
"๊ทธ๋ฐ๋ฐ ์ค๋ ๋๋ ์ด๋ป๊ฒ ์ฌ๊ฐ๋๋์?"
"์ด๋ฅผ ์ํด ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์๋ฆผ์ ๋๋ค."
"๋ชจ๋ํฐ ๊ฐ ์ฌ์ฉ ์ค์ผ ๋๋ง(์ฆ, ๋๊ธฐํ๋ ๋ธ๋ก ๋ด๋ถ์์๋ง) ๋ชจ๋ํฐ ๊ฐ์ฒด์ notify / notifyAll ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค . notifyAll ๋ฉ์๋๋ ์ด ๋ชจ๋ํฐ ๊ฐ์ฒด๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ๋ชจ๋ ์ค๋ ๋๋ฅผ ๊นจ์๋๋ค."
" notify ๋ฉ์๋๋ ํ๋์ ์์ ์ค๋ ๋๋ฅผ '๊ณ ์ ํด์ 'ํ์ง๋ง, notifyAll ๋ฉ์๋๋ ์ด ๋ชจ๋ํฐ์ ๋ชจ๋ ยซ๊ณ ์ ยป ์ค๋ ๋๋ฅผ ๊ณ ์ ํด์ ํฉ๋๋ค."
"๋งค์ฐ ํฅ๋ฏธ๋กญ๊ตฐ. ๊ณ ๋ง์, ๋ฆฌ์."
"wait() ๋ฉ์๋์ ์ ์๋ ์์ต๋๋ค."
wait() ๋ฉ์๋ | ์ค๋ช |
---|---|
|
์ค๋ ๋๋ ยซ๋๊ฒฐยป๋์ง๋ง ๋ฉ์๋์ ์ธ์๋ก ์ ๋ฌ๋ ๋ฐ๋ฆฌ์ด ์๋ฅผ ๊ธฐ๋ค๋ฆฐ ํ ์๋์ผ๋ก ยซ๋๊ฒฐ ํด์ ยป๋ฉ๋๋ค. |
|
์ค๋ ๋๋ "์ ์ง"๋์ง๋ง ์ธ์๋ก ๋ฉ์๋์ ์ ๋ฌ๋ ๋๋ ธ์ด ์๋ฅผ ๊ธฐ๋ค๋ฆฐ ํ ์๋์ผ๋ก "์ ์ง ํด์ "๋ฉ๋๋ค. |
"์ฐ๋ฆฌ๋ ์ด๊ฒ์ ํ์์์์ด ์๋ ๋๊ธฐ๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ผ๋ฐ์ ์ธ ๋๊ธฐ์ฒ๋ผ ์๋ํ์ง๋ง ์ง์ ๋ ์๊ฐ์ด ์ง๋๊ณ ์ค๋ ๋๊ฐ ๊นจ์ด๋์ง ์์ ๊ฒฝ์ฐ ์ค์ค๋ก ๊นจ์ด๋ฉ๋๋ค."
GO TO FULL VERSION