JAVA - 쓰레드 (5)

jodbsgh·2022년 4월 24일
0

💡"JAVA"

목록 보기
48/67

데몬 쓰레드(daemon thread)

  • 일반 쓰레드(non-daemon thread)의 작업을 돕는 보조적인 역할을 수행.

  • 일반 스레드가 모두 종료되면 자동적으로 종료된다.

  • 가비지컬렉터, 자동저장, 화면 자동갱신 등에 사용된다.

  • 무한루프와 조건문을 이용해서 실행 후 대기하다가 특정조건이 만족되면 작업을 수행하고 다시 대기하도록 작성한다.

public void run(){
	while(ture)
    	try
        {
        	Thread.sleep(3 * 1000);		//3초 마다
        } catch(InterruptedException e) { }
        
        //autoSave의 값이 true이면 autoSave()를 호출한다.
        
        if(autoSave)
        {
        	autoSave();
        }
}
  • boolean isDaemon()
    쓰레드가 데몬 쓰레드인지 확인한다. 데몬쓰레드이면 true를 반환
  • void setDaemon(boolean on)
    쓰레드를 데몬 쓰레드로 또는 사용자 쓰레드로 변경 매개변수 on을 true로 지정하면 데몬 쓰레드가 된다.

setDaemon(boolean on)은 반드시 start()를 호출하기 전에 실해되어야 한다.
그렇지 않으면 IllegalThreadStateException이 발생한다.

예제)
class ThreadTest implements Runnable {
	static boolean autoSave = false;
    
    
    //일반 main 쓰레드
    public static void main(String[] args)
    {
    	Thread t = new Thread(new ThreadTest());	
        //run()을 구현한 클래스 객체를 넣어주는 것임...
        
        t.setDaemon(ture);  //이 부분이 없으면 종료되지 않는다.
        t.start();
        
        for(int i =1; i <=10; i++)
        {
        	try
            {
            	Thread.sleep(1000);
            } catch (InterruptedException e) {}
            System.out.println(i);
            
            if(i==5) autoSave = ture;
        }
        
        System.out.println("프로그램을 종료합니다.");
    }// main
    
    
    
    //데몬 쓰레드
    public void run(){
    	while(ture)	//무한루프
        {
        	try
        	{
        		Thread.sleep(3 * 1000);	//3초마다 실행
       	 	} 
            catch(InterruptedException e)  { }
        
        }//while
        
        if(autoSave) autoSave();
         //autoSave의 값이 true 이면 autoSave()를 호출한다.
         
    }//run
}

쓰레드의 상태

  1. NEW
    쓰레드가 생성되고 아직 start()가 호출되지 않은 상태

  2. RUNNABLE
    실행 중 또는 실행 가능한 상태

  3. BLOCKED
    동기화블럭에 의해서 일시정지된 상태(lock이 풀릴 때 까지 기다리는 상태)

4.WAITING.TIME_WAITING
쓰레드의 작업이 종료되지는 않았지만 실행가능하지 않은(unrunnable) 일시정지상태, TIMED_WAITING은 일시정지시간이 지정된 경우를 의미

5.TERMINATED
쓰레드의 작업이 종료된 상태

profile
어제 보다는 내일을, 내일 보다는 오늘을 🚀

0개의 댓글