본문 바로가기
스터디/혼공학습단 10기 - 자바 & 머신러닝

[혼공학습단] Java - 작업 스레드(Thread) 생성의 2가지 방법

by 찌노오 2023. 7. 30.

 

 

 

자바의 멀티스레드 > 스레드를 생성하는 방법

Thread 하위 클래스로 부터 생성

Thread 클래스를 상속받아 스레드를 생성하는 방식
Thread 클래스의 서브 클래스를 정의하고 run() 메서드를 오버라이딩하여 실행할 작업을 구현한다.
start() 메서드를 호출하여 스레드를 실행시키고 start() 메서드 내부에서 run() 메서드가 호출되면서 스레드가 동작한다.

 

 

장점

  • 구현이 간단하고 직관적이다.
  • 일반적인 클래스의 상속과 동일한 특징을 가진다.
    • Thread 클래스를 상속받아서 사용하기 때문에, 스레드 내부에서 this를 사용하여 스레드 자신을 참조할 수 있다.


단점

  • 자바는 단일 상속만을 지원한다.
    • 이미 다른 클래스를 상속한 경우에는 Thread 하위 클래스로부터 생성하는 방식으로 스레드를 구현할 수 없다. 

 

 

class MyThread extends Thread {
    public void run() {
        // 실행할 작업 구현
    }
}

public static void main(String[] args) {
    MyThread thread = new MyThread();
    thread.start(); // 스레드 시작
}

 메인스레드에서 start 메서드를 호출하고 MyThread라는 작업 스레드를 실행하는 구조다.

 

 

Runnable 방식

Runnable 인터페이스를 구현하여 스레드를 생성하는 방식이다.
Runnable 인터페이스는 run() 메서드만을 정의하고 있다. 따라서 스레드 동작을 위해 Runnable 인터페이스를 구현한 클래스를 정의하고 run() 메서드에 실행할 작업을 구현한다.

 

 

장점

  • 자바는 다중 인터페이스 구현이 가능하다.
    • 이미 다른 클래스를 상속한 경우에도 Runnable 방식으로 스레드를 구현할 수 있다.
  • 스레드 동작 로직과 스레드가 실행할 클래스가 분리되어 있어 더 유연한 구현이 가능하다.

 

class MyRunnable implements Runnable {
    public void run() {
        // 실행할 작업 구현
    }
}

public static void main(String[] args) {
    MyRunnable myRunnable = new MyRunnable();
    Thread thread = new Thread(myRunnable);
    thread.start(); // 스레드 시작
}

 

 

마무리

사용 목적에 따라 Thread 방식과 Runnable 방식 중 하나를 선택하여 멀티 스레드를 구현하면 된다.

보통은 Runnable 방식을 더 권장하며, 객체지향적인 설계를 위해 Runnable 인터페이스를 사용하여 스레드를 생성하는 경우가 더 많다고 한다.

 

 

 

 

References

https://change-words.tistory.com/entry/Tread-Pool

https://www.daleseo.com/java-thread-runnable/

https://mangkyu.tistory.com/258

 

 

** 사실과 다른 내용이 있을 수 있습니다. 언제든지 피드백 부탁드립니다!

반응형

댓글