보이지 않은 곳(background)에서 실행되는 낮은 우선순위를 가진 쓰레드를 의미한다.
보조적인 역할을 담당하며 대표적인 데몬 쓰레드로는 메모리 영역을 정리해주는 가비지 컬렉터(GC)가 있다.
public class Main {
public static void main(String[] args) {
Runnable demon = () -> {
for (int i = 0; i < 1000000; i++) {
System.out.println("demon");
}
};
Thread thread = new Thread(demon);
thread.setDaemon(true); // true로 설정시 데몬스레드로 실행됨
thread.start();
for (int i = 0; i < 100; i++) {
System.out.println("task");
}
}
}
람다식을 사용하여 demon 쓰레드를 설정해주었다.
setDaemon(true) 를 통해서 데몬 쓰레드로 설정을 하고 실행을 하였다.
결과적으로 보면 demon 쓰레드는 우선순위가 낮기 때문에 다른 쓰레드 (Main 쓰레드) 가 종료되면 강제 종료가 되기 때문에 demon이라는 출력문이 1000000 수행되지 않는다.
보이는 곳(foreground) 에서 실행되는 높은 우선순위를 가진 쓰레드를 의미한다.
프로그램 기능을 담당하며 대표적인 사용자 쓰레드로는 메인 쓰레드(Main 쓰레드)가 있다.
사용자 쓰레드들이란, 기존에 우리가 따로 만들어놓은 쓰레드들이 다 사용자 쓰레드이다.
주의 !
쓰레드 작업의 중요도에 따라 쓰레드의 우선순위를 부여할 수 있다.
- 작업의 중요도가 높을 때 우선순위를 높게 지정하면 더 많은 작업 시간을 부여 받아 빠르게 처리할 수 있음
최대 우선순위 (MAX_PRIORITY) = 10
최소 우선순위 (MIN_PRIORITY) = 1
보통 우선순위 (NROM_PRIOIRTY) = 5
Thread thread1 = new Thread(task1);
thread1.setPrioirty(8); // 우선순위를 8로 설정
int threadPriorty = thread1.getPriority();
주의!! 우선순위가 높다고 반드시 쓰레드가 먼저 종료되는 것이 아닌, 확률이 높아지는 것 뿐이다.
서로 관련이 있는 쓰레드들을 그룹으로 묶어서 다룰 수 있다.
기본적으로 쓰레드들은 그룹에 포함되어 있다.
메인 쓰레드는 system 그룹 하위에 있는 main 그룹에 포함된다.
모든 쓰레드들은 반드시 하나의 그룹에 포함되어야 한다.
ThreadGroup group1 = new ThreadGroup("Group1"); // ThreadGroup 클래스로 객체를 만듭니다.
// Thread(ThreadGroup group, Runnable target, String name)
Thread thread1 = new Thread(group1, task, "Thread 1"); // Thread 객체 생성시 첫번째 매개변수로 넣어줍니다.
// Thread에 ThreadGroup 이 할당된것을 확인할 수 있습니다.
System.out.println("Group of thread1 : " + thread1.getThreadGroup().getName());
ThreadGroup group1 = new ThreadGroup("Group1"); // ThreadGroup 클래스로 객체를 만듭니다.
// Thread(ThreadGroup group, Runnable target, String name)
Thread thread1 = new Thread(group1, task, "Thread 1");
Thread thread2 = new Thread(group1, task, "Thread 2");
group1.interrupt(); // 일시정지 상태인 쓰레드를 실행대기 상태로 변환