μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
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 |
- κ°λ°μμ·¨μ
- μ½λ©ν μ€νΈμ€λΉ
- xv6
- μ£ΌκΈ°μ νΈ
- leetcode
- tcp μΈκ·Έλ¨ΌνΈ
- μλΉμ€ ν리미ν°λΈ
- μ€λ₯κ²μΆ
- 99ν΄λ½
- νλ‘μ΄λμμ
- ν ν° λ²μ€
- i-type
- νν΄99
- μ€λΈμ
- μμλ²νΈ
- IEEE 802
- λΉμ£ΌκΈ°μ νΈ
- νλ μ ꡬ쑰
- git merge
- μ€λ₯μ μ΄
- reducible
- μ€λ λ
- til
- ν°μ€ν 리μ±λ¦°μ§
- tcp νλ‘ν μ½
- 그리λ μκ³ λ¦¬μ¦
- mariadb
- μ°λΆν¬db
- well known ν¬νΈ
- λ°μ΄ν° μ μ‘
- 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 |