JAVA
[JAVA] Runnable 을 만드는 다양한 방법
경딩
2024. 11. 11. 22:01
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");
}
}
- 람다를 사용하면 메서드(함수 ) 코드 조작을 전달할 수 있다.