Java에서 스레드의 실행 순서, 상태, 우선순위를 제어하는 다양한 방법이 있습니다. 아래는 스레드의 우선순위와 상태 확인, 그리고 sleep()
메서드를 이용한 제어 방법들입니다.
스레드의 우선순위는 실행될 가능성에 영향을 주지만, 절대적인 실행 순서를 보장하지는 않습니다. Java의 우선순위 설정 범위는 1
에서 10
까지이며, 이 값이 높을수록 우선순위가 높습니다. 기본 우선순위는 5
입니다.
코드 설명:
package com.thread;
public class PriorityMain {
public static void main(String[] args) {
System.out.println(Thread.currentThread().getPriority()); // 현재 스레드의 우선순위 출력 (기본값은 5)
System.out.println(Thread.MAX_PRIORITY); // 최대 우선순위 10
System.out.println(Thread.NORM_PRIORITY); // 기본 우선순위 5
System.out.println(Thread.MIN_PRIORITY); // 최소 우선순위 1
}
}
위 코드에서 Thread.MAX_PRIORITY
, Thread.NORM_PRIORITY
, Thread.MIN_PRIORITY
를 통해 우선순위의 범위를 확인할 수 있습니다. 메인 스레드는 기본적으로 5
의 우선순위를 가지며, 이를 통해 다른 스레드와의 우선순위 관계를 조정할 수 있습니다.
우선순위 설정 예제:
System.out.println(gugudan1.getPriority()); // 기본값 출력 (5)
System.out.println(gugudan2.getPriority()); // 기본값 출력 (5)
gugudan1.setPriority(1); // gugudan1의 우선순위를 최소값인 1로 설정
gugudan2.setPriority(9); // gugudan2의 우선순위를 9로 설정
setPriority()
메서드를 통해 스레드의 우선순위를 설정할 수 있습니다. 그러나 이는 OS와 JVM 스케줄러의 영향을 받기 때문에, 우선순위가 높다고 해서 항상 먼저 실행된다는 보장은 없습니다.
스레드의 상태나 특성에 대한 정보를 확인할 수 있는 메서드들이 있습니다. 이는 현재 스레드의 상태나 속성을 점검할 때 유용합니다.
코드 설명:
public class ThreadEx01 {
public static void main(String[] args) {
System.out.println(Thread.currentThread().getPriority()); // 현재 스레드의 우선순위 확인
System.out.println("count : " + Thread.activeCount()); // 활성화된 스레드의 개수 확인
Thread current = Thread.currentThread();
System.out.println(current); // 현재 스레드 정보
System.out.println(current.getName()); // 현재 스레드 이름
System.out.println(current.isAlive()); // 현재 스레드가 실행 중인지 여부
System.out.println(current.isDaemon()); // 현재 스레드가 데몬 스레드인지 여부
}
}
getPriority()
: 현재 스레드의 우선순위를 반환합니다.activeCount()
: 현재 활성화된 스레드의 개수를 반환합니다.isAlive()
: 스레드가 아직 실행 중인지 확인합니다.isDaemon()
: 스레드가 데몬 스레드인지 확인합니다. 데몬 스레드는 모든 사용자 스레드가 종료되면 자동으로 종료되는 백그라운드 스레드입니다.sleep()
메서드는 스레드를 일시정지하여 특정 시간 동안 작업을 중단하도록 합니다. 이는 InterruptedException
을 발생시킬 수 있으므로, 반드시 try-catch
구문으로 예외 처리를 해야 합니다.
코드 설명:
package com.thread;
public class Sleep {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
System.out.println(i);
try {
Thread.sleep(1000); // 1초 동안 스레드를 일시정지
} catch (InterruptedException e) {
System.out.println("[에러] " + e.getMessage());
}
}
}
}
Thread.sleep(1000)
은 현재 스레드를 1초 동안 일시정지하며, 이후 다시 실행됩니다. sleep()
을 통해 여러 작업의 실행 간격을 조정하거나 특정 시간 동안 대기할 수 있습니다.
이처럼 Java에서는 Priority
를 통해 스레드의 우선순위를 설정하고, activeCount()
와 같은 메서드로 상태를 점검하며, sleep()
을 통해 실행 시간을 조정하는 방식으로 스레드를 제어할 수 있습니다.