본문 바로가기
프로그래밍/자바의 정석 기초편 코드 분석

자바의 정석 기초편 코드 분석 131(예제 13-7)

by 리드민 2023. 9. 25.
반응형

[ ] 자바의 정석 기초편 카테고리
chapter 13 쓰레드
chapter 13-19 데몬 쓰레드(daemon thread) 예제
예제 13-7

[ ] 코드 분석
1. 원본 코드

class Ex13_7 implements Runnable {
	static boolean autoSave = false;
    
    public static void main(String[] args) {
    	Thread t = new Thread(new Ex13_7());
        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("작업파일이 자동저장되었습니다.");
    }
}


2. 해석본

class Ex13_7 implements Runnable {
// Runnable 클래스 상속 Ex13_7 클래스 선언
	static boolean autoSave = false;
    // boolean 형 정적 변수 autoSave 선언
    
    public static void main(String[] args) {
    // 접근제어자 public으로 메모리에 상주하게 리턴값이 없이 main 메서드 선언
    	Thread t = new Thread(new Ex13_7());
        // Thread 클래스의 인스턴스 t 선언 
        t.setDaemon(true);			// 이 부분이 없으면 종료되지 않는다.
        t.start();
        // 인스턴스 t의 메서드 start() 사용
        
        for(int i=1; i <=10; i++) {
        // for문 선언
        	try{
            	Thread.sleep(1000);
            } catch(InterruptedException e) {}
            System.out.println(i);
            
            if(i==5) autoSave = true;
            // if문 선언
        }

		System.out.println("프로그램을 종료합니다.");
        // 프로그램을 종료합니다. 출력
    }
    
    public void run() {
    // 접근제어자 public으로 리턴값이 없이 run() 함수 선언
    	while(true) {
        	try {
            	Thread.sleep(3 * 1000);	// 3초마다
            } catch(InterruptedException e) {}
            
            // autoSave의 값이 true이면 autoSave()를 호출한다.
            if(autoSave) autoSave();
        }
    }
    
    public void autoSave() {
    // 접근제어자 public으로 
    	System.out.println("작업파일이 자동저장되었습니다.");
        // 작업파일이 자동저장되었습니다. 출력
    }
}
반응형