4주차 미션!
4주차는 챕터 12 입니다!
12 | 스레드
4주차만 하면 방학입니다~!!!
얏호~~~~!
아주 좋습니다!~~!
방학은 방학이구,,,,
스레드 너무 어렵더라구요...
어렵긴 해도 직접적으로 운영체제에 인터럽트를 걸 수 있어서 아주 흥미롭습니다!
프로세스 순서를 내가 한번 정의해보겠다, 이말입니다~!!
레츠고~
[기본 미션] p. 550 [직접해보는 손코딩] 코딩 과정 및 실행 결과 캡처하기
[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]
[실행코드]
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]
[실행코드]
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]
[실행코드]
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]
[실행코드]
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주차로 돌아옵니다~!!
'[혼공단 10기] 자바' 카테고리의 다른 글
[혼공단 10기] 자바 6주차 미션! 완주! (0) | 2023.08.20 |
---|---|
[혼공단 10기] 자바 5주차 미션! (0) | 2023.08.20 |
[혼공단 10기] 자바 3주차 미션! (0) | 2023.07.24 |
[혼공단 10기] 자바 2주차 미션! (0) | 2023.07.16 |
[혼공단 10기] 자바 1주차 미션! (0) | 2023.07.09 |