"์๋ , ์๋ฏธ๊ณ !"
"wait-notify์ ๋ํด ์์ธํ ์์๋ณด๊ณ ์ถ์ต๋๋ค. wait-notify ๋ฉ์๋๋ ์ค๋ ๋๊ฐ ์ํธ ์์ฉํ ์ ์๋ ํธ๋ฆฌํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค. ์ค๋ ๋ ์ํธ ์์ฉ์ ์ํ ๋ณต์กํ ๊ณ ์์ค ๋ฉ์ปค๋์ฆ์ ๊ตฌ์ถํ๋ ๋ฐ์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค."
"์์ ์๋ถํฐ ์์ํ๊ฒ ์ต๋๋ค. ์น ์ฌ์ดํธ๋ฅผ ํตํด ์ฌ์ฉ์๊ฐ ๋ง๋ ๋ค์ํ ์์ ์ ์ํํด์ผ ํ๋ ์๋ฒ์ฉ ํ๋ก๊ทธ๋จ์ด ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์ฌ์ฉ์๋ ๋ค์ํ ์์ ์ ๋ค๋ฅธ ์๊ฐ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์์ ์ ๋ฆฌ์์ค ์ง์ฝ์ ์ด์ง๋ง ์๋ฒ์ 8 -์ฝ์ด ํ๋ก์ธ์๊ฐ ๋์ฒํ ์ ์์ต๋๋ค. ์๋ฒ์์ ์์ ์ ์ด๋ป๊ฒ ์ํํด์ผ ํฉ๋๊น?"
"๋จผ์ ํ๋ก์ธ์ ์ฝ์ด ์๋งํผ ์์ ์ ์ค๋ ๋ ๊ทธ๋ฃน์ ์์ฑํฉ๋๋ค. ๊ฐ ์ค๋ ๋๋ ์์ฒด ์ฝ์ด์์ ์คํ๋ ์ ์์ต๋๋ค. ์ค๋ ๋๋ ์๋ก ๊ฐ์ญํ์ง ์์ผ๋ฉฐ ํ๋ก์ธ์ ์ฝ์ด๋ ๊ฐ๋งํ ์์."
"๋ ๋ฒ์งธ๋ก, ์ฌ์ฉ์์ ์์ ์ด ์ถ๊ฐ๋ ๋๊ธฐ์ด ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค. ๋ค๋ฅธ ์ ํ์ ์์ ์ ๋ค๋ฅธ ๊ฐ์ฒด์ ํด๋นํ์ง๋ง ๋ชจ๋ ์คํํ ์ ์๋๋ก Runnable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํฉ๋๋ค."
"์์ ๊ฐ์ฒด์ ์๋ฅผ ๋ค์ด ์ฃผ์๊ฒ ์ต๋๊น?"
"ํ์ธ ํด๋ด:"
class Factorial implements Runnable
{
public int n = 0;
public long result = 1;
public Factorial (int n)
{
this.n = n;
}
public void run()
{
for (int i = 2; i <= n; i++)
result *= i;
}
}
"์ฌํ๊น์ง๋ ๊ทธ๋ฐ๋๋ก ์๋๋ค."
"์ข์ต๋๋ค. ๊ทธ๋ผ ํ ๊ฐ์ฒด๊ฐ ์ด๋ป๊ฒ ๋ณด์ฌ์ผ ํ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๊ฒ์ ๋ํด ๋ฌด์์ ๋ง์ํด ์ฃผ์๊ฒ ์ต๋๊น?"
"์ค๋ ๋๋ก๋ถํฐ ์์ ํด์ผ ํฉ๋๋ค. ์ฌ์ฉ์๋ก๋ถํฐ ํ์คํฌ๋ฅผ ์์ ํ๋ ์ค๋ ๋์ ์ํด ํ์คํฌ ์ค๋ธ์ ํธ์ ํจ๊ป ๋ก๋๋ ๋ค์ ์์ ์ ์ค๋ ๋๊ฐ ํ์คํฌ๋ฅผ ์ ํํฉ๋๋ค."
"๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋์ ์์ ์ด ๋ถ์กฑํ๋ฉด ์ด๋ป๊ฒ ํ ๊น์?"
"๊ทธ๋ฌ๋ฉด ์์ ์ ์ค๋ ๋๋ ๋ ์์ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค."
"๊ทธ๋ ์ต๋๋ค. ์ด์ ์ด ๋ชจ๋ ๊ฒ์ด ๋จ์ผ ๋๊ธฐ์ด์ ๊ตฌ์ถ๋ ์ ์๋ค๊ณ ์์ํด ๋ณด์ญ์์ค. ํ์ธํ์ญ์์ค."
public class JobQueue
{
ArrayList jobs = new ArrayList();
public synchronized void put(Runnable job)
{
jobs.add(job);
this.notifyAll();
}
public synchronized Runnable getJob()
{
while (jobs.size() == 0)
this.wait();
return jobs.remove(0);
}
}
" ์์ ๋ชฉ๋ก์ด ๋น์ด ์๋์ง ํ์ธํ๋ getJob ๋ฉ์๋๊ฐ ์์ต๋๋ค . ๊ทธ๋ฐ ๋ค์ ๋ชฉ๋ก์ ๋ฌด์ธ๊ฐ๊ฐ ๋ํ๋ ๋๊น์ง ์ค๋ ๋๊ฐ ์ ์ ๋ชจ๋(๋๊ธฐ)๋ก ์ ํ๋ฉ๋๋ค."
"๋ชฉ๋ก์ ์ ์์ ์ ์ถ๊ฐํ ์ ์๋ put ๋ฉ์๋ ๋ ์์ต๋๋ค . ์ ์์ ์ด ์ถ๊ฐ๋์๋ง์ notifyAll ๋ฉ์๋ ๊ฐ ํธ์ถ๋ฉ๋๋ค. ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด getJob ๋ฉ์๋ ๋ด์์ ์ ๋ ๋ชจ๋ ์์ ์ ์ค๋ ๋๊ฐ ๊นจ์ด๋ฉ๋๋ค.โ
"๋๊ธฐ ๋ฐ ์๋ฆผ ๋ฐฉ๋ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ค์ ๊ธฐ์ตํ ์ ์์ต๋๊น?"
"๋๊ธฐ ๋ฉ์๋๋ ๋ฎคํ ์ค ๊ฐ์ฒด์ ๋๊ธฐํ๋ ๋ธ๋ก ๋ด๋ถ์์๋ง ํธ์ถ๋ฉ๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ: this์ ๋๋ค. ๋ํ ๋ ๊ฐ์ง ์ผ์ด ๋ฐ์ํฉ๋๋ค.
1) ์ค๋ ๋๊ฐ ์ ๋ค์์ต๋๋ค.
2) ์ค๋ ๋๊ฐ ์ผ์์ ์ผ๋ก ๋ฎคํ ์ค๋ฅผ ํด์ ํฉ๋๋ค(๊นจ์ด๋ ๋๊น์ง).
"๊ทธ ํ์ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ๋๊ธฐํ๋ ๋ธ๋ก์ ๋ค์ด๊ฐ ๋์ผํ ๋ฎคํ ์ค๋ฅผ ํ๋ํ ์ ์์ต๋๋ค."
" notifyAll ๋ฉ์๋๋ ๋ฎคํ ์ค ๊ฐ์ฒด์ ๋๊ธฐํ๋ ๋ธ๋ก ๋ด์์๋ง ํธ์ถํ ์๋ ์์ต๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ: this์ ๋๋ค. ๋ํ ๋ ๊ฐ์ง ์ผ์ด ๋ฐ์ํฉ๋๋ค."
1) ์ด ๋ฎคํ ์ค ๊ฐ์ฒด๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ๋ชจ๋ ์ค๋ ๋๊ฐ ๊นจ์ด๋ฉ๋๋ค.
2) ํ์ฌ ์ค๋ ๋๊ฐ ๋๊ธฐํ๋ ๋ธ๋ก์ ์ข ๋ฃํ๋ฉด ๊นจ์ด๋ ์ค๋ ๋ ์ค ํ๋๊ฐ ๋ฎคํ ์ค๋ฅผ ํ๋ํ๊ณ ์์ ์ ๊ณ์ํฉ๋๋ค. ๋ฎคํ ์ค๋ฅผ ํด์ ํ๋ฉด ๊นจ์ด๋ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ๋ฎคํ ์ค๋ฅผ ํ๋ํ๋ ์์ ๋๋ค.
"๋ฒ์ค์ ๋งค์ฐ ๋น์ทํฉ๋๋ค. ๋ค์ด๊ฐ์ ์๊ธ์ ์ง๋ถํ๊ณ ์ถ์ง๋ง ์ด์ ์ฌ๊ฐ ์์ต๋๋ค. ๊ทธ๋์ ยซ์ ์ด ๋ญ๋๋คยป. ๊ฒฐ๊ตญ ๋ฒ์ค๋ ๋ง์์ด์ง๋ง ์ฌ์ ํ ์๊ธ์ ์ค ์ฌ๋์ด ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด์ ์ฌ๋ ๋์ฐฉํด์ ยซ์ ๋ถํ๋๋ฆฝ๋๋คยป๋ผ๊ณ ๋งํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด ์์์ ๋๋ค..."
"ํฅ๋ฏธ๋ก์ด ๋น๊ต๊ตฐ์. ๊ทธ๋ฐ๋ฐ ๋ฒ์ค๊ฐ ๋ญก๋๊น?"
"Julio๊ฐ ์ค๋ช ํ์ต๋๋ค. 21 ์ธ๊ธฐ์ ์ฌ์ฉ๋๋ ์ด์ํ ๊ฒ๋ค์ด์์์ต๋๋ค."