๐งตJava Thread
JVM๊ณผ Thread
ํ๋ก์ธ์ค์ ์ฐ๋ ๋
- JVM์ด ์์๋๋ฉด Java ํ๋ก์ธ์ค๊ฐ ์์๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ด ํ๋ก์ธ์ค ์์์ ์ฌ๋ฌ ๊ฐ์ ์ฐ๋ ๋๋ผ๋ ๊ฒ์ด ์๋ฅ๋ฐ๋ฅ ์ด๊ฒ๋๋ค.
- Tomcat๊ณผ ๊ฐ์ WAS๋ ์ญ์๋ ๋๊ฐ์ด main() ๋ฉ์๋์์ ์์ฑํ ์ฐ๋ ๋๋ค์ด ์ํ๋๋ ๊ฒ์ด๋ค.
Java์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์กด์ฌํ๋ Thread๋ค
- ์๋ฌด๋ฐ ์ฐ๋ ๋๋ฅผ ์์ฑํ์ง ์์๋ JVM์ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ฌ๋ฌ ์ฐ๋ ๋๊ฐ ์กด์ฌํ๋ค.
- ์๋ฅผ ๋ค๋ฉด Java์ ์ฐ๋ ๊ธฐ ๊ฐ์ฒด๋ฅผ ์ฒญ์ํ๋
GC ๊ด๋ จ ์ฐ๋ ๋
๊ฐ ์ฌ๊ธฐ์ ์ํ๋ค.
Thread์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ
- JVM์ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฌด๋ฐ ์ต์ ์์ด ์คํํ๋ฉด OS๋ง๋ค ๋ค๋ฅด์ง๋ง ์ ์ด๋ 32MB~64MB์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ ํ๋ค.
- ๊ทธ์ ๋ฐํด์, ์ฐ๋ ๋๋ฅผ ํ๋ ์ถ๊ฐํ๋ฉด 1MB ์ด๋ด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ ํ๋ค.
- ๊ทธ๋์ ์ฐ๋ ๋๋ฅผ
๊ฒฝ๋ ํ๋ก์ธ์ค
๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
Java์ Thread
์์ฑ
Runnable ์ธํฐํ์ด์ค
๋Thread ํด๋์ค
๋ฅผ ํตํด ์ฐ๋ ๋๋ฅผ ์์ฑํ๋ค.- ๋๋ค
java.lang
์ ์๋ค. - ๋๋ค
run()
์ผ๋ก ์คํํ๋ค. - ๋ ๋ค๋ฅธ ํด๋์ค๋ฅผ ์์ํ ํ์๊ฐ ์์๋๋ Runnable ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค.
Thread์ ์ด๋ฆ
- ๋ชจ๋ ์ฐ๋ ๋๋ ์ด๋ฆ์ด ์๋ค.
- ์ด๋ฆ์ ์ง์ ํ์ง ์์ผ๋ฉด ๊ทธ ์ฐ๋ ๋์ ์ด๋ฆ์
Thread-n
์ด๋ค.
์ฐ์ ์์ ์ง์
- ์ฐ์ ์์ ๊ด๋ จ ์์๊ฐ ์ ์๋์ด ์๋ค.
MAX_PRIORITY
,NORM_PRIORITY
,MIN_PRIORITY
- ํ์ง๋ง ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
Stack ์ฌ์ด์ฆ
- ์์ฑ์ stackSize๋ฅผ ์ง์ ํ ์ ์๋ค. ๊ฒฝ์ฐ์ ๋ฐ๋ผ์๋ ์ด ๊ฐ์ด ๋ฌด์๋ ์๋ ์๋ค.
Sleep ๋ฉ์๋
- Thread ํด๋์ค์๋ sleep() ๋ฉ์๋๊ฐ ์๋ค.
Thread.sleep()
์ ์ธ๋๋ ๋ฐ๋์try-catch
๋ก ๋ฌถ๊ณ , ์ ์ด๋InterruptedExceiption
์ผ๋ก catchํด์ฃผ์ด์ผํ๋ค.
๋ฐ๋ชฌ ์ฐ๋ ๋
- ๋ฐ๋ชฌ ์ฐ๋ ๋๊ฐ ์๋ ์ฌ์ฉ์ ์ฐ๋ ๋๋ JVM์ด ํด๋น ์ฐ๋ ๋๊ฐ ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค.
thread.setDaemon(true);
- ์๋ฅผ ๋ค์ด ๋ชจ๋ํฐ๋งํ๋ ์ฐ๋ ๋๋ฅผ ๋ณ๋๋ก ๋์ ๋ชจ๋ํฐ๋งํ ๋ ์ฌ์ฉํ ์ ์๋ค.
join ๋ฉ์๋
- ์ธ์๊ฐ ์๋ค๋ฉด ์๊ฐ์ ํ์์ด ์ํ ์ค์ธ ์ฐ๋ ๋๊ฐ ์ค์งํ ๋๊น์ง ๋๊ธฐํ๋ค.
join(6000);
๊ณผ ๊ฐ์ด ์ธ์๊ฐ ์์ ๊ฒฝ์ฐ ํน์ ์๊ฐ๋งํผ๋ง ๊ธฐ๋ค๋ฆฐ๋ค.
interrupt ๋ฉ์๋
InterruptedException
์ ๋ฐ์์ํจ๋ค.
Synchronized
- ๋ฉ์๋ ์์ฒด๋ฅผ synchronized๋ก ์ ์ธํ ์ ์๋ค.
- synchronized methods๋ผ๊ณ ๋ถ๋ฅธ๋ค.
public synchronized void plus(int value) { ... }
- ๋ธ๋ก์ผ๋ก ๊ฐ์ธ๋ ๋ฐฉ๋ฒ
- synchronized statements๋ผ๊ณ ๋ถ๋ฅธ๋ค.
-synchronized(this) { ... }
- ์ ๊ธ์ฒ๋ฆฌ๋ฅผ ์ํ ๊ฐ์ฒด๋ฅผ ์ ์ธํด์ผํ๋ค.
Object lock = new Object; synchronized(lock) { ... }
- synchronized statements๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์์ ์ฝ๋
public class StateThread extends Thread {
private Object monitor;
public StateThread(Object monitor) {
this.monitor = monitor;
}
public void run() {
try {
for (int loop = 0; loop < 10000; loop++) {
String a = "A";
}
synchronzied(monitor) {
// ๋ค๋ฅธ ์ฐ๋ ๋๊ฐ Object ๊ฐ์ฒด์ ๋ํ notify() ๋ฉ์๋๋ notifyAll() ๋ฉ์๋๋ฅผ ํธ์ถํ ๋๊น์ง
// ํ์ฌ ์ฐ๋ ๋๊ฐ ๋๊ธฐํ๊ณ ์๋๋ก ํ๋ค.
monitor.wait();
}
Thread.sleep(1000);
} catch(InterruptedException ie) {
ie.printStackTrace();
}
}
}
[1] ์ด์๋ฏผ, 25์ฅ โ์ฐ๋ ๋๋ ๊ฐ๋ฐ์๋ผ๋ฉด ์์๋๋ ๊ฒ์ด ์ข์์โ, ์๋ฐ์็ฅ 2nd Edition