중첩 클래스를 사용하면 Runnable
을 더 편리하게 만들 수 있다.
특정 클래스 내에서만 활용되는 스레드라면,
import static util.MyLogger.log;
public class RunnableMain {
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()");
}
}
}
출력 👇
16:09:39.600 [ main] main() start
16:09:39.602 [ main] main() end
16:09:39.603 [ Thread-0] run()
특정 메서드 안에서만 간단히 정의하고 사용하고 싶다면,
log("main() start");
// 익명 클래스로 사용
Runnable runnable = new Runnable() {
@Override
public void run() {
log("run()");
}
};
Thread thread = new Thread(runnable);
thread.start();
log("main() end");
출력 👇
16:09:39.600 [ main] main() start
16:09:39.602 [ main] main() end
16:09:39.603 [ Thread-0] run()
log("main() start");
// 바로 전달
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
log("run()");
}
});
thread.start();
log("main() end");
log("main() start");
// 람다~
Thread thread = new Thread(() -> log("run()"));
thread.start();
log("main() end");