์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- leetcode
- well known ํฌํธ
- git merge
- ์์๋ฒํธ
- xv6
- mariadb
- ํ ํฐ ๋ฒ์ค
- ์ฝ๋ฉํ ์คํธ์ค๋น
- ํญํด99
- ๋น์ฃผ๊ธฐ์ ํธ
- ์ค๋ฅ์ ์ด
- ํ๋ ์ ๊ตฌ์กฐ
- ์ค๋ธ์
- tcp ์ธ๊ทธ๋จผํธ
- tcp ํ๋กํ ์ฝ
- i-type
- ์ฐ๋ถํฌdb
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ์ฃผ๊ธฐ์ ํธ
- til
- IEEE 802
- ๋ฐ์ดํฐ ์ ์ก
- ์๋น์ค ํ๋ฆฌ๋ฏธํฐ๋ธ
- reducible
- ํ๋ก์ด๋์์
- ๊ฐ๋ฐ์์ทจ์
- ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ
- 99ํด๋ฝ
- ์ค๋ฅ๊ฒ์ถ
- ์ค๋ ๋
- Today
- Total
Unfazedโ๏ธ๐ฏ
[Java] ์ค๋ ๋์ ๊ธฐ๋ฅ๊ณผ ๋๋ฒ๊น ๋ณธ๋ฌธ
1. ๋ฉํฐ์ค๋ ๋ฉ์ ๊ฐ๋
๋ฉํฐ์ค๋ ๋ฉ์ ํ๋์ ํ๋ก๊ทธ๋จ ๋ด์์ ์ฌ๋ฌ ์์
์ ๋์์ ์คํํ ์ ์๋๋ก ํ๋ ๊ธฐ๋ฒ์ด๋ค. Java์์๋ Thread ํด๋์ค์ Runnable ์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํด ๋ฉํฐ์ค๋ ๋๋ฅผ ๊ตฌํํ ์ ์๋ค.
์ค๋ ๋๋ฅผ ํ์ฉํ๋ฉด CPU ์์์ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ์ฌ ๋ณ๋ ฌ ์ฒ๋ฆฌ ๋ฐ ์๋ต์ฑ์ ๋์ผ ์ ์๋ค.
2. ์๋ก์ด ์ค๋ ๋ ์์ฑํ๊ธฐ
Java์์ ์๋ก์ด ์ค๋ ๋๋ฅผ ์์ฑํ๋ ค๋ฉด ๋จผ์ Thread ๊ฐ์ฒด๋ฅผ ์์ฑํด์ผ ํ๋ค. ์์ฑ์์ Runnable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๊ณ , Runnable ์ธํฐํ์ด์ค์ run() ๋ฉ์๋์ ์ค๋ ๋๊ฐ ์คํํ ๋ก์ง์ ์์ฑํ ์ ์๋ค.
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
// ์ด์์ฒด์ ์ ์ํด ์ค์ผ์ค ๋๋ฉด ํด๋น ์ค๋ ๋์์ ์คํ๋ ๋ก์ง
System.out.println("run() ํธ์ถ : " + Thread.currentThread().getName());
System.out.println("Thread.currentThread().getPriority() = " + Thread.currentThread().getPriority());
throw new RuntimeException("Intentional Exception");
}
});
ใ
์ด ์ฝ๋์์๋ ์ต๋ช ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ Runnable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์์ผ๋ฉฐ, run() ๋ฉ์๋ ๋ด์์ ์ค๋ ๋ ์ด๋ฆ๊ณผ ์ฐ์ ์์๋ฅผ ์ถ๋ ฅํ ํ ์๋์ ์ผ๋ก ์์ธ๋ฅผ ๋ฐ์์ํค๋ ๋ก์ง์ ๋ด๊ณ ์๋ค.
3. ์ค๋ ๋์ ์คํ๊ณผ ๊ด๋ฆฌ
์ค๋ ๋ ์์
์ค๋ ๋๋ฅผ ์์ฑํ ํ์๋ start() ๋ฉ์๋๋ฅผ ํธ์ถํด์ผ JVM์ด ์๋ก์ด ์ค๋ ๋๋ฅผ ์์ฑํ๊ณ ์ด์์ฒด์ ์ ์ ๋ฌํ๊ฒ ๋๋ค. ์ฆ, ๋จ์ํ ์ค๋ ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ค๋ ๋๊ฐ ์คํ๋์ง ์๋๋ค.
thread.start();
ํ์ฌ ์คํ ์ค์ธ ์ค๋ ๋ ํ์ธ
๋ฉ์ธ ์ค๋ ๋์ ์๋ก์ด ์ค๋ ๋์ ์คํ ์์๋ฅผ ํ์ธํ๊ธฐ ์ํด, Thread.currentThread() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ํ์ฌ ์คํ ์ค์ธ ์ค๋ ๋ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ค.
System.out.println("[์ ์ค๋ ๋ ์์ ์ ] Thread.currentThread().getName() = " + Thread.currentThread().getName());
์ค๋ ๋ ์ผ์์ ์ง
Thread.sleep() ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ฉด ํ์ฌ ์ค๋ ๋๋ฅผ ์ผ์ ์๊ฐ ๋์ ์ผ์์ ์ง์ํฌ ์ ์๋ค. ์ด ๊ฒฝ์ฐ, CPU ์์์ ์๋ชจํ์ง ์๊ณ ์ด์์ฒด์ ์ ์ํด ํด๋น ์๊ฐ ๋์ ์ค์ผ์ค๋์ง ์๋๋ค.
Thread.sleep(10000);
4. ์ค๋ ๋์ ์ด๋ฆ๊ณผ ์ฐ์ ์์ ์ค์
์ค๋ ๋ ์ด๋ฆ ๋ณ๊ฒฝ
๊ธฐ๋ณธ์ ์ผ๋ก ์๋ก ์์ฑ๋ ์ค๋ ๋๋ โThread-0โ๊ณผ ๊ฐ์ด ์๋์ผ๋ก ์ด๋ฆ์ด ์ง์ ๋๋ค. ๊ทธ๋ฌ๋ ์๋ฏธ ์๋ ์ด๋ฆ์ ์ค์ ํ๋ ๊ฒ์ด ๋๋ฒ๊น
๊ณผ ๊ด๋ฆฌ์ ๋์์ด ๋๋ค.
์ด๋ฅผ ์ํด setName() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
thread.setName("New Worker ์ค๋ ๋");
์ค๋ ๋ ์ฐ์ ์์ ์ค์
Java ์ค๋ ๋๋ 1๋ถํฐ 10๊น์ง์ ์ฐ์ ์์๋ฅผ ์ง์ ํ ์ ์์ผ๋ฉฐ, ๊ธฐ๋ณธ ์ฐ์ ์์๋ Thread.NORM_PRIORITY์ด๋ค.
ํน์ ์ค๋ ๋์ ์๋ต์ฑ์ ๋์ด๊ฑฐ๋ ์ค์๋๋ฅผ ๋ฐ์ํ๊ธฐ ์ํด setPriority() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
thread.setPriority(Thread.MAX_PRIORITY); //์ด์ ์์ ์ง์ (10=max) => ์๋ต์ฑ ๋์์ง
์คํ ์ค getPriority() ๋ฉ์๋๋ฅผ ํตํด ์ฐ์ ์์๋ฅผ ํ์ธํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ์ค์ ํ ๊ฐ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ ์ฉ๋์๋์ง ๊ฒ์ฆํ ์ ์๋ค.
5. ์์ธ ์ฒ๋ฆฌ ๋ฐ Uncaught Exception Handler
์ค๋ ๋ ๋ด์์ ๋ฐ์ํ unchecked ์์ธ๊ฐ ์ ์ ํ ์ฒ๋ฆฌ๋์ง ์์ผ๋ฉด ์ค๋ ๋ ์ ์ฒด๊ฐ ์ข
๋ฃ๋ ์ ์๋๋ฐ,
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด setUncaughtExceptionHandler() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ธ ์ฒ๋ฆฌ ํธ๋ค๋ฌ๋ฅผ ๋ฑ๋กํ ์ ์๋ค.
์์ธ ์ฒ๋ฆฌ ํธ๋ค๋ฌ๋ ํด๋น ์ค๋ ๋์์ ์์ธ๊ฐ ๋ฐ์ํ์ฌ catch ๋ธ๋ก์์ ์ฒ๋ฆฌ๋์ง ์์ ๊ฒฝ์ฐ ์๋์ผ๋ก ํธ์ถ๋๋ค.
thread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler(){
@Override
public void uncaughtException(Thread t, Throwable e) {
System.out.println("์ค๋ ๋์์ ์น๋ช
์ ์ธ error ๋ฐ์ = " + t.getName() + " \n๋ฐ์ error = " + e.getMessage());
}
});
6. ์ ์ฒด ์ฝ๋
public class Main {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
// ์ด์์ฒด์ ์ ์ํด ์ค์ผ์ค ๋๋ฉด ํด๋น ์ค๋ ๋์์ ์คํ๋ ๋ก์ง
System.out.println("run() ํธ์ถ : " + Thread.currentThread().getName());
System.out.println("Thread.currentThread().getPriority() = " + Thread.currentThread().getPriority());
throw new RuntimeException("Intentional Exception");
}
});
thread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler(){
@Override
public void uncaughtException(Thread t, Throwable e) {
System.out.println("์ค๋ ๋์์ ์น๋ช
์ ์ธ error ๋ฐ์ = " + t.getName() + " \n๋ฐ์ error = " + e.getMessage());
}
});
thread.setName("New Worker ์ค๋ ๋"); // ๊ธฐ๋ณธ Thread-0 ๋์ ์ ์ด๋ฆ ์ง์
thread.setPriority(Thread.MAX_PRIORITY); // ์ฐ์ ์์ ์ง์ (10 = MAX)
System.out.println("[์ ์ค๋ ๋ ์์ ์ ] Thread.currentThread().getName() = " + Thread.currentThread().getName());
thread.start(); // JVM์ด ์ ์ค๋ ๋๋ฅผ ์์ฑํด OS์ ์ ๋ฌ
System.out.println("[์ ์ค๋ ๋ ์์ ํ] Thread.currentThread().getName() = " + Thread.currentThread().getName());
// ํ์ฌ ์คํ ์ค์ธ ์ค๋ ๋๋ฅผ ์ผ์ ์๊ฐ ๋์ ์ ์ง์ํด (CPU ์๋ชจ ์์)
Thread.sleep(10000);
}
}
์ถ๊ฐ - ๋๋ฒ๊น ๊ณผ ์ค๋ ๋ ๊ด๋ฆฌ
IDE๋ฅผ ํ์ฉํ๋ฉด ๋ฉํฐ์ค๋ ๋ฉ ์ ํ๋ฆฌ์ผ์ด์
์ ๋๋ฒ๊น
์ด ์ฉ์ดํด์ง๋ค.
๋๋ฒ๊ทธ ๋ชจ๋์์ ๋ธ๋ ์ดํฌํฌ์ธํธ๋ฅผ ์ค์ ํ๊ณ ์ค๋ ๋ ํญ์ ํ์ธํ๋ฉด ํ์ฌ ์คํ ์ค์ธ ๋ชจ๋ ์ค๋ ๋์ ๊ฐ ์ค๋ ๋์ ์คํ ํธ๋ ์ด์ค๋ฅผ ํ์ธํ ์ ์๋ค. ๋ธ๋ ์ดํฌํฌ์ธํธ์ ๋๋ฌํ๋ฉด ๋ชจ๋ ์ค๋ ๋๊ฐ ์ผ์์ ์ง๋๋ฏ๋ก, ๊ฐ ์ค๋ ๋๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ๋ถ์ํ ์ ์๋ค.

์ฐธ๊ณ ์๋ฃ:
Udemy - Java ๋ฉํฐ์ค๋ ๋ฉ, ๋ณํ์ฑ ๋ฐ ๋ณ๋ ฌ ์คํ ํ๋ก๊ทธ๋๋ฐ ์ ๋ฌธ๊ฐ ๋๊ธฐ
https://docs.oracle.com/javase/10/docs/api/java/lang/Thread.State.html
Thread.State (Java SE 10 & JDK 10 )
docs.oracle.com
'Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ์ค๋ ๋ ์ข ๋ฃ & Daemon ์ค๋ ๋ (0) | 2025.02.06 |
---|---|
[Java] ์ค๋ ๋ ์์ฑ (Runnable ์ธํฐํ์ด์ค ๊ตฌํ, Thread ํด๋์ค ์์) (0) | 2025.02.06 |
HashSet/HashMap์ ๋ด๋ถ ๊ตฌ์กฐ ๋ฐ ์ค๋ณต ์ ๊ฑฐ ๋ฉ์ปค๋์ฆ (0) | 2025.01.22 |
Java Stream API - map() & flatMap() (0) | 2025.01.20 |
command line์ ํ์ฉํ JAR ํ์ผ ์์ฑํ๊ธฐ (0) | 2024.12.21 |