[혼공학습단7기] 4주차 기본 미션, 선택 미션
01. 기본 미션 : p.550 [직접 해보는 손코딩] 코딩 과정 및 실행 결과 캡쳐하기
AutoSaveThread.java
package sec02.exam05;
public class AutoSaveThread extends Thread {
public void save() {
System.out.println("작업 내용을 저장함.");
}
@Override
public void run() {
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
break;
}
save();
}
}
}
DaemonExample.java
package sec02.exam05;
public class DaemonExample {
public static void main(String[] args) {
AutoSaveThread autoSaveThread = new AutoSaveThread();
autoSaveThread.setDaemon(true);
autoSaveThread.start();
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
}
System.out.println("메인 스레드 종료");
}
}
교재에서는 Thread.sleep() 부분이 3000이었으나, 실행 결과를 책와 동일하게 출력하기 위해서는 4000으로 설정해야 했다.
왜 그럴까? 한번 생각을 해 봅시다~!
1. 1000ms가 지날 때마다 "작업 내용을 저장함."을 출력함
2. 3000ms가 지나면 스레드를 종료함.
3. 0초일 때 작업 내용을 저장하지 않았고, 1초일 때 1번 저장, 2초일 때 2번째 저장을 한다.
4. 3초가 지난 뒤에는 저장보다 메인 스레드 종료가 먼저 진행되기 때문에, 3000으로 설정할 경우 다음과 같은 결과가 출력된다.
02. 선택 미션 : p.539 문제 2번 풀고, 풀이 과정 설명하기
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());
thread2.start();
}
}
MovieThread.java
package sec01.verify.exam02;
public class MovieThread extends 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 {
@Override
public void run() {
for(int i=0;i<3;i++) {
System.out.println("음악을 재생합니다.");
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}
1. new MusicRunnable()
MusicRunnable을 매개값으로 갖는 생성자를 호출하는 것이기 때문에, 뒤에 ()를 붙여 주어야 합니다.
2. extends Thread
부모에서 선언 / 정의를 모두 진행하며, 자식은 메소드 / 변수를 그대로 사용할 수 있습니다.
본 코드는 Thread를 상속받기 위하여 사용합니다.
3. implements Runnable
extends와 달리, 부모 객체는 선언만 하며 정의는 자식에서 오버라이딩 해서 사용해야합니다.
즉, run() 상위에 @Override가 있기 때문에 extends가 아닌 implements를 사용합니다.
오랜만에 뵙는 것 같은데 기분 탓이 아니겠죠?
저는 요번 주에 학생회장으로서의 임무를 다하고... 장렬히... 전사하러 가려고 합니다...
코에 바람도 좀 넣고 왔는데 오미크론도 같이 안 넣어졌길 간절히 바라야겠네요 ^_T...
다들 건강 조심 항상 코로나 조심하고...~ 건강이 제일인 거 아시죠?
다음 주에도 재미있게 봅싀다...