๋ชฉ์ฐจ
์ค๋ ๋
ํ๋ก๊ทธ๋จ ์คํ์ ํ ์ค๊ธฐ
์๋ฐ ๊ฐ์ ๋จธ์ (JVM)์ ํ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์์์ ์ฌ๋ฌ ์คํ ์ค๊ธฐ๊ฐ ๋์์ ์งํ๋๋๋ก ํ์ฉ
- ์ค๋ ๋ ์ฐ์ ์์
- ๋ชจ๋ ์ค๋ ๋๋ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ค.
- ๋์ ์ฐ์ ์์์ ์ค๋ ๋๊ฐ ๋ฎ์ ์ฐ์ ์์์ ์ค๋ ๋๋ณด๋ค ๋จผ์ ์คํ๋๋ค.
- ๋ฐ๋ชฌ ์ค๋ ๋
- ์ค๋ ๋๋ ๋ฐ๋ชฌ ์ค๋ ๋๋ก ํ์๋ ์๋ ์๊ณ ์๋ ์๋ ์๋ค.
- ๋ฐ๋ชฌ ์ค๋ ๋๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์์ ๋์ํ๋ฉฐ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์ข ๋ฃ๋๋ฉด ํจ๊ป ์ข ๋ฃ๋๋ค.
- ์ ์ค๋ ๋ ์์ฑ ์ ํน์ ์์
- ์๋ก์ด ์ค๋ ๋๋ฅผ ๋ง๋ค ๋, ๊ทธ ์ค๋ ๋๋ ์์ฑํ ์ค๋ ๋์ ํน์ง์ ์ผ๋ถ ๋ฌผ๋ ค๋ฐ๋๋ค.
- ์ฐ์ ์์ : ์ ์ค๋ ๋๋ ์์ฑํ ์ค๋ ๋์ ๋์ผํ ์ฐ์ ์์๋ฅผ ๊ฐ์ง
- ๋ฐ๋ชฌ ์ฌ๋ถ : ์์ฑํ ์ค๋ ๋๊ฐ ๋ฐ๋ชฌ์ด๋ฉด ์ ์ค๋ ๋๋ ๋ฐ๋ชฌ์ด ๋๋ค.
- ์๋ก์ด ์ค๋ ๋๋ฅผ ๋ง๋ค ๋, ๊ทธ ์ค๋ ๋๋ ์์ฑํ ์ค๋ ๋์ ํน์ง์ ์ผ๋ถ ๋ฌผ๋ ค๋ฐ๋๋ค.
public class ThreadExample {
public static void main(String[] args) {
Thread mainThread = Thread.currentThread();
System.out.println("๋ฉ์ธ ์ค๋ ๋ ์ฐ์ ์์ :" + mainThread.getPriority());
Thread newThread = new Thread( () ->{
System.out.println("์ ์ค๋ ๋ ์ฐ์ ์์: " + Thread.currentThread().getPriority());
System.out.println("์ ์ค๋ ๋ ๋ฐ๋ชฌ ์ฌ๋ถ: " + Thread.currentThread().isDaemon());
});
newThread.start();
Thread daemonThread = mew Thread( () -> {
});
daemonThread.setDaemon(true);
daemonThread.start();
๐ก ์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ธก์ ํ๋ ์ค๋ ๋๋ ํฌ๊ทธ๋ผ์ด๋ ์๋น์ค์์ ๋ง๋ค์ด์ฃผ์๋๋ฐ ๋ฐ๋ชฌ ์ค๋ ๋์ผ๊น?
A. ์๋ !! ์ผ๋ฐ ์ค๋ ๋์ด๋ค.
๋ฐ๋ชฌ ์ค๋ ๋ vs ์ผ๋ฐ ์ค๋ ๋
- ๋ฐ๋ชฌ ์ค๋ ๋ : ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋๋ฉฐ, ๋ชจ๋ ๋น๋ฐ๋ชฌ ์ค๋ ๋๊ฐ ์ข ๋ฃ๋๋ฉด ์๋์ผ๋ก ์ข ๋ฃ๋๋ค.
- ์ผ๋ฐ ์ค๋ ๋ : ๋ช ์์ ์ผ๋ก ์ข ๋ฃํ๊ฑฐ๋ ์์ ์ด ์๋ฃ๋ ๋๊น์ง ๊ณ์ ์คํ๋๋ค.
๋๋ ๋ฐ๊ฟ๊น?
→ ๋ฐ๋ชฌ ์ค๋ ๋๋ ์ฑ์ ๋ชจ๋ ์ผ๋ฐ ์ค๋ ๋๊ฐ ์ข ๋ฃ๋๋ฉด ์๋์ผ๋ก ์ข ๋ฃ๋๋ค.
๊ทธ๋ฌ๋ ์ธ์ ์ ํํ ์ข ๋ฃ๋ ์ง ์์ธกํ๊ธฐ ์ด๋ ต๋ค.
๐ก ์ค๋ ๋๋ ๋ค ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋์๊ฐ๋ ๊ฑฐ ์๋๊ฐ?
A. ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ ๋๋ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋๋ค.
- ์ฌ๊ธฐ์์ ๋ฐฑ๊ทธ๋ผ์ด๋ : UI์ ์ง์ ์ ์ผ๋ก ์ํธ์์ฉํ์ง ์๋ ์์ญ
๋ฉ์ธ ์ค๋ ๋์ ๊ธฐํ์ค๋ ๋
- ๋ฉ์ธ ์ค๋ ๋ : UI ์์ ์ ๋ด๋นํ๋ ํน๋ณํ ์ค๋ ๋
- ๊ธฐํ ์ค๋ ๋ : ๋ฉ์ธ ์ค๋ ๋ ์ธ์ ๋ชจ๋ ์ค๋ ๋๋ก ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ์ํ
๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ์ ์๋ฏธ
- ๋ชจ๋ ์ค๋ ๋๊ฐ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋์ง๋ง ๊ทธ ์ญํ ๊ณผ ์ค์๋๋ ๋ค๋ฆ
- ์ผ๋ฐ ์ค๋ ๋์ ๋ฐ๋ชฌ ์ค๋ ๋์ ์ฐจ์ด๋ ๋ฐ๋ก ์๋ช ์ฃผ๊ธฐ!
๋ฐ๋ชฌ ์ค๋ ๋ vs ์ผ๋ฐ ์ค๋ ๋
- ๋ฐ๋ชฌ ์ค๋ ๋ : ์ฑ์ ๋ค๋ฅธ ์ผ๋ฐ ์ค๋ ๋๊ฐ ๋ชจ๋ ์ข ๋ฃ๋๋ฉด ๊ฐ์ ์ข ๋ฃ๋๋ค.
- ์ผ๋ฐ ์ค๋ ๋ : ์์ ์ด ์๋ฃ๋๊ฑฐ๋ ๋ช ์์ ์ผ๋ก ์ข ๋ฃ๋ ๋๊น์ง ๊ณ์ ์คํ๋๋ค.
์๋๋ก์ด๋์์ ์ค๋ ๋
- ๋ชจ๋ ์ค๋ ๋๊ฐ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋์ง๋ง ๋ชฉ์ ๊ณผ ๊ด๋ฆฌ๋ฐฉ์์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ทจ๊ธ ๊ฐ๋ฅ
- ์ ) ํฌ๊ทธ๋ผ์ด๋ ์๋น์ค์ ์ค๋ ๋๋ ์์คํ ์ ์ํด ๋ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง ์ ์์
java ๊ฐ์ ๋จธ์ (JVM)์ ์์๊ณผ ์ข ๋ฃ ๊ณผ์
- JVM ์์
- JVM์ด ์์๋ ๋ ๋ณดํต ํ๋์ ๋น ๋ฐ๋ชฌ ์ค๋ ๋๊ฐ ็
- ์ด ์ค๋ ๋๋ ์ฃผ๋ก main ์ค๋ ๋๋ฅผ ์คํํ๋ ์ญํ ์ ํจ
- ์ด๋ฅผ ๋ฉ์ธ ์ค๋ ๋๋ผ๊ณ ํ๋ค!
- JVM ์คํ ์ง์
- JVM์ ์ค๋ ๋๋ค์ ๊ณ์ ์คํํ๋ค.
- JVM ์ข
๋ฃ ์กฐ๊ฑด
- Runtime.exit() ๋ฉ์๋ ํธ์ถ
- Runtime ํด๋์ค์ exit ๋ฉ์๋๊ฐ ํธ์ถ๋๊ณ
- ๋ณด์ ๊ด๋ฆฌ์ security manger)๊ฐ ์ด ์ข ๋ฃ ์์ ์ ํ์ฉํ ๊ฒฝ์ฐ
- ๋ชจ๋ ๋น ๋ฐ๋ชฌ ์ค๋ ๋์ ์ข
๋ฃ
- ๋ฐ๋ชฌ ์ค๋ ๋๊ฐ ์๋ ๋ชจ๋ ์ค๋ ๋๊ฐ ์ข ๋ฃ๋์์ ๋
- ์ค๋ ๋ ์ข
๋ฃ์ ๋ ๊ฐ์ง ๊ฒฝ์ฐ
- run() ๋ฉ์๋๊ฐ ์ ์์ ์ผ๋ก ๋ฐํ๋์ด ๋๋๋ ๊ฒฝ์ฐ
- run() ๋ฉ์๋ ์คํ ์ค ์์ธ๊ฐ ๋ฐ์ํ์ฌ ์ฒ๋ฆฌ๋์ง ์๊ณ ์ ํ๋ ๊ฒฝ์ฐ
- Runtime.exit() ๋ฉ์๋ ํธ์ถ
์ค๋ ๋ ์์ฑํ๊ธฐ 1
- Thread ํด๋์ค ์์
- PrimeThread๊ฐ java์ Thread ํด๋์ค๋ฅผ ์์๋ฐ๊ณ ์๋ค
- → PrimeThread๊ฐ ์ค๋ ๋๋ก์ ๋์ํ ์ ์๊ฒ ํด์ค๋ค.
- ์์ฑ์ ์ ์
- DDungThread ํด๋์ค๋ long minPrime์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋ ์์ฑ์๋ฅผ ๊ฐ์ง๋ค.
- ์ด ์์ฑ์๋ ์ฃผ์ด์ง ๊ฐ์ ํด๋์ค์ minDDung ํ๋์ ์ ์ฅํ๋ค.
- run() ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋
- Thread ํด๋์ค์ run() ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ๋ค.
- ์ด ๋ฉ์๋ ์์ ์ค๋ ๋๊ฐ ์คํํ ์ค์ ์์ ์ ์ ์ํ๋ค.
// 1. ์ค๋ ๋ ํด๋์ค ์์
class DDungThread extends Thread {
long minPrime;
// 2. ์์ฑ์ ์ ์
DDungThread(long minPrime) {
this.minDDung = minDDung;
}
// 3. run ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋
public void run() {
//
}
}
- ์ค๋ ๋ ์ฌ์ฉ ๋ฐฉ์
์ด๋ ๊ฒ ์์ฑํ๊ณ start() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ์๋ก์ด ์ค๋ ๋๊ฐ ์์๋๋ค.
DDungThread DDungpi = new DDungThread(143);
DDungpi.start();
- ์๋ ๋ฐฉ์
- start() ๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉด JVM์ ์๋ก์ด ์ค๋ ๋๋ฅผ ์์ฑํ๊ณ run() ๋ฉ์๋๋ฅผ ์๋ณใ ํ๋ค.
- run() ๋ฉ์๋๋ ๋ณ๋์ ์ค๋ ๋์์ ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋๋ค.
์ค๋ ๋ ์์ฑํ๊ธฐ 2
- Runnable ์ธํฐํ์ด์ค ์ฌ์ฉํ๊ธฐ
Runnable ์ธํฐํ์ด์ค๋ ์๋ฐ์์ ์ค๋ ๋๊ฐ ์ํํ ์์ ์ ์ ์ํ๋ ์ญํ ์ ํ๋ค.
์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ run ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ์ฌ ๊ทธ ์์ ์ค์ ๋ก ์ํํ ์์ ์ ์์ฑํ๋ค.
class DDungpiEat implements Runnable {
// ๋ฑ์ด 1์๊ฐ ๋จน์ ์ ์๋ ์ต์ํ์ ์์ ์
long minFood;
DDungpiEat(long minFood) {
this.minFood = minFood
}
public void run() {
// ๋ฑ์ด ํ๋ฃจ์ ๋จน์ ์ ์๋ ์์์์ ๊ตฌํ๊ณ ,
// 1์๊ฐ์ ๋จน์ ์ ์๋ ์์์์ ๊ณ์ฐํ๋ค.
}
}
- ์ค๋ ๋ ์์ํ๊ธฐ
- DDungpiEat ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ์ด๋ฅผ ์ค๋ ๋๋ก ์คํํด๋ณด์
- new Thread(ddungpiEat) : DDungpiEat ๊ฐ์ฒด๋ฅผ Thread์ ๋๊ฒจ์ฃผ๋ฉด์ ์๋ก์ด ์ค๋ ๋๋ฅผ ๋ง๋ ๋ค.
- t.start() : ์ค๋ ๋๋ฅผ ์์ํ๋ฉด DDungpiEat ํด๋์ค์ run() ๋ฉ์๋๊ฐ ์คํ๋๋ค.
DDungpiEat ddungpiEat = new DDungpiEat(2000);
Thread t = new Thread(ddungpiEat);
t.start()
์ค๋ ๋์ ์ด๋ฆ
์๋ฐ์์ ์ค๋ ๋๋ฅผ ๊ตฌ๋ถํ๊ฑฐ๋ ์๋ณํ ๋ ์ด๋ฆ์ ์ฌ์ฉํ ์ ์๋ค.
์ค๋ ๋ ์ด๋ฆ ์ค์ ํ๊ธฐ
Thread t1 = new Thread(new DDungpiEat(2000), "DDungpi");
t1.start()
DDungpi ๋ผ๋ ์ค๋ ๋ ์ด๋ฆ ์ง์
์๋ฐ์์๋ ํน์ ๋ฉ์๋๋ ์์ฑ์์ null ๊ฐ์ ์ ๋ฌํ๋ฉฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
ํนํ ์ค๋ ๋์ ๊ด๋ จ๋ ๋ฉ์๋๋ ์์ฑ์์ null ์ ์ ๋ฌํ๋ฉด NullPointerException๊ฐ ๋ฐ์ํ๋ค.
'๐ค2024 ์๋๋ก์ด๋ > โ๏ธ ํ๊ณ ์ธํด ๊ฐ๋ฐ ํ๋ก์ ํธ ๊ธฐ๋ก' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Android : Handler ์ดํดํ๊ธฐ (0) | 2024.08.29 |
---|---|
Android ๊ถํ ์์ฒญ ์ฒ๋ฆฌํ๊ธฐ (๋ฐํ์ ๊ถํ??) (0) | 2024.08.23 |
๐ ํ๋ก์ ํธ ์๋ฃ ํ 4L ํ๊ณ (0) | 2024.08.19 |
๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์ธก์ ํด๋ณด๊ธฐ (2) | 2024.08.14 |
๐ Android ์ 4๋ ๊ตฌ์ฑ์์ Service์ ๋ํด ์์๋ณด์! (0) | 2024.08.12 |