본문 바로가기

[혼공단 10기] 자바

[혼공단 10기] 자바 4주차 미션!

 

 

 

4주차 미션!

 

 

4주차는 챕터 12 입니다!

 

 

12 | 스레드

 

 

4주차만 하면 방학입니다~!!!

 

얏호~~~~!

 

아주 좋습니다!~~!

 

 

방학은 방학이구,,,,

 

스레드 너무 어렵더라구요...

 

어렵긴 해도 직접적으로 운영체제에 인터럽트를 걸 수 있어서 아주 흥미롭습니다!

 

프로세스 순서를 내가 한번 정의해보겠다, 이말입니다~!!

 

 

레츠고~ 


[기본 미션] p. 550 [직접해보는 손코딩] 코딩 과정 및 실행 결과 캡처하기 

 

[DaemonExample.java]

DaemonExample.java

[실행코드]

package sec02.exam05;

//메인 스레드가 실행하는 코드
public class DaemonExample {

	//자바의 어플리케이션은 메인스레드가 main()메소드를 실행하면서 시작한다.
	public static void main(String[] args) {
		AutoSaveThread autoSaveThread = new AutoSaveThread();
		//AutoSaveThread 클래스 객체 생성한다.
		autoSaveThread.setDaemon(true);
		//객체의 스레드를 데몬 스레드로 설정한다.
		autoSaveThread.start();
		//객체의 작업 스레드를 실행시킨다(start())
	
		try {
			Thread.sleep(3000);
			//메인스레드는 3초 동안 대기한다.
		} catch(InterruptedException e) {
			//예외상황에서의 InterruptedException을 설정해둔다. -> 대기가 길어질 경우 강제종료가 이루어짐.
		}
		
		System.out.println("메인 스레드 종료");
		//메인스레드가 종료됨을 출력하고 종료한다.
		
	}

}

//1초 주기로 save() 메소드를 자동 호출하도록 AutoSaveThread를 작성하고,
//메인 스레드가 3초 후 종료되면 AutoSaveThread도 같이 종료되도록 만들어진 코드

 


[AutoSaveThread.java]

AutoSaveThread.java

[실행코드]

package sec02.exam05;

//1초 주기로 save() 메소드를 호출하는 데몬 스레드
//(1초 간격으로 "작업 내용을 정리함."이라는 메시지 출력)

//백그라운드에서 실행되며, 일반 스레드가 모두 종료되면 자동으로 종료됨.
public class AutoSaveThread extends Thread {
	//클래스를 선언하고 Thread 클래스를 확장함 -> 스레드로 동작 가능.
	
	public void save() { //save()라는 메소드 선언 
		System.out.println("작업 내용을 저장함.");
		//작업 또는 데이터가 저장되었음을 출력함.
	}

	@Override
	//하단의 메소드가 상위클래스(Thread())의 메소드를 재정의 한다는 것을 의미
	
	public void run() {
		//스레드의 코드 실행이 시작되는 진입점.
		while(true) {
			//break 문이 나올때까지 계속해서 실행
		
			try { //예외처리를 위한 try-catch 블록
				Thread.sleep(1000);
				//1초동안 메인 스레드를 일시 정지 상태로 만든다.
			} catch (InterruptedException e) {
				//예외발생 시 InterruptedException 정의 -> 강제종료
				break;
				//InterruptedException이 잡히면 실행되며, 무한루프를 빠져나가고 스레드를 종료하게됨.
			}
			save();
			//위에서 선언한 save()메소드 호출
			//무한 루프 안에서 호출되며, 1초마다 "작업 내용을 저장함." 메시지를 출력함.
		}
	}
}

 

[실행결과] 아주 굿~!

 

 

 

1초 간격으로 "작업 내용을 저장함."이 출력되고, 

3초 후 "메인 스레드 종료"가 출력됨.


[선택 미션] P. 539 문제 2번 풀고, 풀이 과정 설명하기

정답!

1: new MusicRunnable()

2: extends Thread

3: implements Runnable

 

 

[ThreadExample.java]

ThreadExample.java

 

[실행코드]

package sec01.verify.exam02;

public class ThreadExample {

	public static void main(String[] args) {
		Thread thread1 = new MovieThread();
		thread1.start();
		
		Thread thread2 = new Thread(new MusicRunnable());
		//MusicRunnable은 Runnable 인터페이스를 구현한 클래스이기 때문에 Thread의 생성자로 전달하여 스레드를 생성해야 한다.
		thread2.start();
	}
}

 


[MovieThread.java]

MovieThread.java

 

[실행코드]

package sec01.verify.exam02;

public class MovieThread extends Thread{
	//Thread 클래스를 확장시켜준다.(상속)
	@Override
	public void run() {
		for(int i=0; i<3; i++) {
			System.out.println("동영상을 재생합니다.");
			try {
				Thread.sleep(1000);
			}catch(InterruptedException e) {
				
			}
		}
	}
}

 


[MusicRunnable.java]

MusicRunnable.java

 

[실행코드]

package sec01.verify.exam02;

public class MusicRunnable implements Runnable{
	//Runnable은 작업 스레드가 실행할 수 있는 코드를 갖고 있는 객체
	//인터페이스 타입이기 때문에 구현 객체를 만들어 대입해야 한다.
	@Override
	public void run() {
		for(int i=0; i<3; i++) {
			System.out.println("음악을 재생합니다.");
			try {
				Thread.sleep(1000);
			}catch(InterruptedException e) {
				
			}
		}
	}
}

 

 

[실행결과]

MovieThread : "동영상을 재생합니다." 문장을 3번 출력한다.

MusicRunnable : "음악을 재생합니다."  문장을 3번 출력한다.

ThreadExample : Movie -> Music 순서대로 스레드를 시작하는 코드이다.

 

메인스레드가 실행되는 ThreadExmaple 파일을 실행하면 스레드(Movie, Music) 코드를 데몬 스레드로 실행한다.

 

 


 

꺄아아아~!

일주일간 방학입니다~!!!!

 

 

 

아주 좋군요~~

일주일 뒤, 5주차로 돌아옵니다~!!