스레드 생성과 실행2

Walter Mitty·2025년 4월 6일
0

개인공부

목록 보기
47/51

전에 스레드를 생성하기 위해 Thread 클래스를 상송받는 방법과 Runnable 인터페이스를 구현하는 방법이 있다고 했는데 드디어 Runnable 인터페이스를 구현하는 방식으로 스레드를 생성해보려고 한다.
(Runnable 인터페이스를 구현하는 방식이 실무와 조금 더 가깝다.)

Runnable 인터페이스

Runnable 인터페이스는 java가 제공하는 스레드 실행용 인터페이스다!

public class HelloRunnable implements Runnable{
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + ": run()");
    }
}
public class HelloRunnableMain {
    public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName() + ": main() start");
        HelloRunnable runnable = new HelloRunnable();
        Thread thread = new Thread(runnable);
        thread.start();
        System.out.println(Thread.currentThread().getName() + ": main() end");
    }
}

Thread를 상속해서 구현한 스레드처럼 Thread-0 에서 따로 run()이 실행된 것을 볼 수 있다.

main: main() start
main: main() end
Thread-0: run()

실행 결과는 기존과 같은데, 차이가 있다면 스레드와 해당 스레드가 실행할 작업이 서로 분리되어 있다는 점이다.
스레드 객체를 생성할 때, 실행할 작업을 생성자로 전달하면 된다.

Thread 클래스 상속 방식

장점

  • 간단한 구현: Thread 클래스를 상속받아 run() 메서드만 재정의 하면 됨

단점

  • 상속의 제한: 자바는 단일 상속만 허용해서 이미 다른 클래스를 상속받고 있는 경우 Thread 클래스 상속이 불가능함
  • 유연성 부족: 인터페이스를 사용하는 방법에 비해 유연성이 떨어짐

Runnable 인터페이스 구현 방식

장점

  • 상속의 자유로움: Runnable 인터페이스 방식은 다른 클래스를 상속받아도 문제없이 구현 가능
  • 코드의 분리: 스레드와 실행할 작업을 분리하여 코드의 가독성을 높일 수 있음
  • 여러 스레드가 동일한 Runnable 객체를 공유할 수 있어 자원 관리를 효율적으로 할 수 있다.

단점

  • 코드가 약간 복잡해질 수 있다. Runnable 객체를 생성하고 이를 Thread에 전달하는 과정이 추가되기 때문!

Runnable을 방식을 사용해야하는 이유는 위에 장단점으로도 명확하기도 하지만,
일단 스레드와 실행할 작업을 명확히 분리하고, 더 유연하고 유지보수 하기 쉬운 코드를 만들 수 있다는 점에서라도 Runnable을 사용하는게 좋다.

0개의 댓글