[Java] ์ค๋ ๋ ์์ฑ (Runnable ์ธํฐํ์ด์ค ๊ตฌํ, Thread ํด๋์ค ์์)
Java์์๋ ์ค๋ ๋๋ฅผ ์์ฑํ๋ ๋ ๊ฐ์ง ๋ฐฉ์์ด ์๋ค.
Runnable ์ธํฐํ์ด์ค ๊ตฌํ ๋ฐฉ์
- ๋ณ๋์ Runnable ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ ์ด๋ฅผ Thread ํด๋์ค์ ์์ฑ์์ ์ ๋ฌํ์ฌ ์ค๋ ๋๋ฅผ ์์ฑํ๋ค.
- ์ด์ ๊ฒ์๊ธ์์ ๋ค๋ฃฌ ๋ฐฉ์์ผ๋ก ์ฝ๋์ ๋ก์ง์ ๋ถ๋ฆฌํด์ ์์ฑํ ์ ์๋ค.
Runnable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๋ฐฉ์์ ์ฝ๋์ ์ค๋ ๋ฉ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ์ฌ ์์ฑํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ค๋ ๋๋ก ์คํํ ์์ ์ ์ง์คํ ์ ์๊ณ , ๋์ผํ Runnable์ ์ฌ๋ฌ ์ค๋ ๋์์ ์ฌ์ฌ์ฉํ๊ฑฐ๋ ํ ์คํธํ๊ธฐ๊ฐ ์ฉ์ดํ๋ค. ๋ํ, ์์์ ์ ์ฝ ์์ด ๋ค๋ฅธ ํด๋์ค๋ฅผ ์์๋ฐ์ ์ ์๋ค๋ ์ ๋ ํฐ ์ด์ ์ด๋ค.
Thread ํด๋์ค๋ฅผ ์์๋ฐ๋ ๋ฐฉ์
- Thread ํด๋์ค ์์ฒด๊ฐ Runnable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์์ผ๋ฏ๋ก, ์ด๋ฅผ ์์ํ์ฌ run() ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ๋ค.
- ์์์ ํตํด ์ค๋ ๋ ๊ด๋ จ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์์ด, ์ถ๊ฐ ๊ธฐ๋ฅ ๊ตฌํ์ด๋ ๊ณตํต ๋ก์ง ์บก์ํ์ ์ ๋ฆฌํ๋ค.
๋ฐ๋ฉด์, Thread ํด๋์ค๋ฅผ ํ์ฅํ๋ ๋ฐฉ์์ ์ค๋ ๋ ๊ด๋ จ ๊ธฐ๋ฅ๊ณผ ์คํํ ๋ก์ง์ด ํ๋์ ํด๋์ค์ ๊ฒฐํฉ๋์ด ์๊ธฐ ๋๋ฌธ์, ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๊ณ ์ค๋ ๋ ๋ด๋ถ์ ๋ฉค๋ฒ๋ค(์: this.getName() ๋ฑ)์ ์ง์ ์ ๊ทผํ๊ธฐ ํธ๋ฆฌํ๋ค. ๋จ, ์ด ๊ฒฝ์ฐ ๋ค๋ฅธ ํด๋์ค๋ฅผ ์์๋ฐ๊ธฐ ์ด๋ ค์์ง๋ ์ ์ฝ์ด ์๊ธฐ๊ณ , ์ค๋ ๋์ ์คํํ ์ฝ๋๊ฐ ๋ฐ์ ํ๊ฒ ๊ฒฐํฉ๋๋ฏ๋ก ์ฝ๋์ ๋ชจ๋ํ ์ธก๋ฉด์์๋ ์กฐ๊ธ ๋ถ๋ฆฌํ ์ ์๋ค.
์๋๋ Threadํด๋์ค๋ฅผ ์์๋ฐ์ NewThread ํด๋์ค๋ฅผ ๊ตฌํํ ์์ด๋ค.
private static class NewThread extends Thread {
@Override
public void run() {
this.setName("์ค๋ ๋ ์์ NewThread");
System.out.println("Hello from = " + this.getName()); //static Thread ํธ์ถ ๋์ this ์ฌ์ฉ ๊ฐ๋ฅ
}
}
์ด๋ ๊ฒ ๊ตฌํํ๋ฉด main์์๋ ๋จ์ํ new NewThread()์ฒ๋ผ ์์ฑํ์ฌ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
Thread thread = new NewThread();
thread.start();
์ํฉ์ ๋ฐ๋ฅธ ์ค๋ ๋ ์์ฑ ๋ฐฉ์
- ๋ง์ฝ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ํ ์คํธ ์ฉ์ด์ฑ์ ๊ณ ๋ คํ๊ฑฐ๋ ๋ค๋ฅธ ํด๋์ค๋ฅผ ์์๋ฐ์์ผ ํ๋ ๊ฒฝ์ฐ, Runnable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ ์ค๋ ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ด ๋ ์ ํฉํ๋ค.
- ๋ฐ๋๋ก ์คํํ ์์ ์ด ๋จ์ํ๊ณ ๋ค๋ฅธ ์์ ๊ด๊ณ๊ฐ ํ์ ์์ผ๋ฉฐ, ์ค๋ ๋ ๊ธฐ๋ฅ๊ณผ ์คํ ๋ก์ง์ ํจ๊ป ๊ด๋ฆฌํด๋ ๊ด์ฐฎ๋ค๋ฉด Thread๋ฅผ ํ์ฅํ๋ ๋ฐฉ์์ด ์ข๋ค.
๊ฒฐ๊ตญ ์ด๋ ๋ฐฉ์์ด ์ ๋ต์ด๋ผ๊ธฐ๋ณด๋ค๋ ๊ฐ๋ฐ ํ๊ฒฝ, ์ฝ๋ ์ ์ง ๋ณด์์ฑ, ํ์ฅ์ฑ ๋ฑ์ ๊ณ ๋ คํ์ฌ ์ํฉ์ ๋ง๊ฒ ์ ํํ๋ ๊ฒ์ด ์ค์ํ๋ค.