[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