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");
    }

}
  • 람다를 사용하면 메서드(함수 ) 코드 조작을 전달할 수 있다.