Hello

Java 데몬쓰레드(deomon thread), 쓰레드의 상태

by 볼빵빵오춘기

데몬 쓰레드(deomon thread)

  • 일반 쓰레드(non-daemon thread)의 작업을 돕는 보조적인 역할을 수행한다.
  • 일반 쓰레드가 모두 종료되면 자동적으로 종료된다.
  • 가비지 컬렉터, 자동저장, 화면 자동 갱신 등에 사용된다.
  • 무한루프와 조건문을 이용해서 실행 후 대기하다가 특정조건이 만족되면 작업을 수행하고 다시 대기하도록 작성한다.

⇒ 무한 루프이기때문에 sleep() 쉬고 autoSave 자동저장하고 일반 쓰레드 종료되면 자동으로 종료

 

 

예제 코드

더보기
import java.util.*;
import javax.swing.JOptionPane;

public class Try implements Runnable {

	static boolean autoSave = false;
	
	
	public static void main(String[] args) {
		Thread t = new Thread(new Try());
		t.setDaemon(true);		// 이 부분이 없으면 종료되지 않는다.
		t.start();

		for(int i=1; i <= 10; i++) {
			try{
				Thread.sleep(1000);
			} catch(InterruptedException e) {}
			System.out.println(i);

			if(i==5) autoSave = true;
		}

		System.out.println("프로그램을 종료합니다.");

	}
	
	public void run() {
		while(true) {
			try { 
				Thread.sleep(3 * 1000); // 3초마다
			} catch(InterruptedException e) {}

			// autoSave의 값이 true이면 autoSave()를 호출한다.
			if(autoSave) autoSave();
		}
	}

	public void autoSave() {
		System.out.println("작업파일이 자동저장되었습니다.");
	}
}

⇒ 1 뜨고 2 뜨고 3뜨고 이런식으로 되다가 종료됐다.

 

쓰레드의 상태

 

쓰레드의 실행제어

쓰레드의 실행을 제어할 수 있는 메서드가 제공된다.

이 들을 활용해서 보다 효율적인 프로그램의 작성할 수 있다.

 

쓰레드 실행제어 메서드

  • static void sleep(long millis)
    static void sleep(long millis, int nanos)
    지정된 시간(천분의 일초 단위)동안 쓰레드를 일시정지시킨다. 지정한 시간이 지나고 나면, 자동적으로 다시 실행대기상태가 된다.

 

  • void join()
    void join(long millis)
    void join(long millis, int nanos)
    지정된 시간동안 쓰레드가 실행되도록 한다. 지정된 시간이 지나거나 종료되면 join()을 호출한 쓰레드로 다시 돌아와 실행을 계속한다.

 

  • void interrupt()
    sleep()이나 join()에 의해 일시정지상태인 쓰레드를 깨워서 실행대기상태로 만든다. 해당 쓰레드에서는 interrupted Exception이 발생함으로써 일시정지 상태를 벗어나게 된다.

 

  • void stop()
    쓰레드를 즉시 종료시킨다. 

 

  • void suspend()
    쓰레드를 일시정지 시킨다. resume()을 호출하면 다시 실행대기상태가 된다. 

 

  • void resume()
    suspend()에 의해 일시정지상태에 있는 쓰레드를 실행대기상태로 만든다.

 

  • static void yield()
    실행 중에 자신에게 주어진 실행시간을 다른 쓰레드에게 양보(yield)하고 자신은 실행대기상태가 된다.

 

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기