Runnable을 만드는 다양한 방법
중첩 클래스를 사용하면 Runnable을 더 편리하게 만들 수 있다.
참고로 모두 결과는 같아.
정적 충첩 클래스 사용
package thread.start;
import static util.MyLogger.log;
public class InnerRunnableMainV1 {
// 특정 클래스만에서만 사용되는 경우 정적 중첩 클래스 사용
public static void main(String[] args) {
log("main() start");
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
log("main() end");
}
static class MyRunnable implements Runnable {
@Override
public void run() {
log("run");
}
}
}
- 특정 클래스 안에서만 사용되는 경우 이렇게 중첩 클래스를 사용하면 된다.
익명 클래스 사용
package thread.start;
import static util.MyLogger.log;
public class InnerRunnableMainV2 {
// 익명 클래스 사용
public static void main(String[] args) {
log("main() start");
Runnable runnable = new Runnable() {
@Override
public void run() {
log("run");
}
};
Thread thread = new Thread(runnable);
thread.start();
log("main() end");
}
}
- 특정한 메서드 안에서만 정의하고 싶다면 익명클래스를 사용하면 된다.
익명 클래스 변수 없이 전달
package thread.start;
import static util.MyLogger.log;
public class InnerRunnableMainV3 {
// 익명 클래스 사용 - 변수 없이 직접 전달
public static void main(String[] args) {
log("main() start");
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
log("run");
}
});
thread.start();
log("main() end");
}
}
- 익명 클래스를 참조하는 변수를 만들지 않고 직접 전달할 수 있다.
람다
package thread.start;
import static util.MyLogger.log;
public class InnerRunnableMainV4 {
public static void main(String[] args) {
log("main() start");
// 람다를 배우면 이해
Thread thread = new Thread(() -> log("run"));
thread.start();
log("main() end");
}
}
- 람다를 사용하면 메서드(함수 ) 코드 조작을 전달할 수 있다.
'JAVA' 카테고리의 다른 글
[JAVA] 스레드 Interrupted (0) | 2024.11.13 |
---|---|
[JAVA] 스레드 Join (0) | 2024.11.12 |
[JAVA] 데몬 스레드 (0) | 2024.11.11 |
[JAVA] 스레드란? run() start() 의 차이 (0) | 2024.11.11 |
[JAVA] String + 연산과 비효율성 StringBuilder의 해결 원리 (0) | 2024.11.10 |