[Java] Thread 상속 대신 Runnable 을 사용하라.

2024. 7. 21. 01:57·JVM/Java

 

결론

Thread 상속 대신 Runnable 구현을 택하라.

 

(1) 상속보다 구현이 더 유연하다.

Java는 다중 상속을 허용하지 않기 때문에 이미 다른 클래스를 상속중인 클래스에 Thread 추가 상속은 불가능하다.

반면에, 인터페이스는 얼마든 구현할 수 있다.

// FIXME: 다중상속은 허용되지 않는다.
class MyService extends Service, Thread {
}

 

(2) Runnable 은 실행할 작업만 정의할 수 있다.

쓰레드를 사용하는 개발자의 주 관심사는 보통 만들고자 하는 쓰레드가 '무슨 일'을 할 것인지다.

Runnable 인터페이스를 구현함으로써 '무슨 일'을 할지만 정의하면된다.

즉, 필요한 만큼의 역할만 갖는다. 

 class PrintRunnable implements Runnable {
    @Override
    public void run() {
      // TODO
    }
  }

 

 

https://github.com/openjdk/jdk21/blob/master/src/java.base/share/classes/java/lang/Thread.java

 

jdk21/src/java.base/share/classes/java/lang/Thread.java at master · openjdk/jdk21

https://openjdk.org/projects/jdk/21 released 2023-09-19 - openjdk/jdk21

github.com

Java Thread 클래스의 라인수는 거진 3,000라인에 육박한다.

Thread 는 '어떤 일'을 할지 뿐만 아니라 쓰레드의 컨텍스트를 어떻게 관리할지, Interrupt 발생시 행위, 시작, 종료, 중단 등의 많은 역할을 갖는다.

Thread 상속 방식은 불필요한 역할을 너무 많이 갖게된다.

 

이러한 이유로 Thread 상속 보다는 Runnable  구현을 택하는게 좋다.

 

 

 

저작자표시 (새창열림)

'JVM > Java' 카테고리의 다른 글

[Java] OutOfMemory 잡기  (0) 2025.01.28
[Java] 예외 번역과 예외 연쇄 기법  (0) 2024.09.30
[Java] Guava - MultiMap , BiMap  (0) 2024.07.14
[Java] Generic vs WildCard  (2) 2024.01.07
[객체지향] 잘못된 DRY 원칙 적용  (0) 2023.12.16
'JVM/Java' 카테고리의 다른 글
  • [Java] OutOfMemory 잡기
  • [Java] 예외 번역과 예외 연쇄 기법
  • [Java] Guava - MultiMap , BiMap
  • [Java] Generic vs WildCard
M_Falcon
M_Falcon
  • M_Falcon
    Falcon
    M_Falcon
  • 전체
    오늘
    어제
    • 분류 전체보기 (432)
      • Web (16)
        • Nodejs (14)
        • Javascript (23)
        • FrontEnd (4)
      • DataBase (39)
        • Fundamental (1)
        • Redis (4)
        • PostgreSQL (10)
        • NoSQL (4)
        • MySQL (9)
        • MSSQL (3)
        • Error (4)
      • Algorithm (79)
        • Algorithm (문제풀이) (56)
        • Algorithm (이론) (23)
      • JVM (65)
        • Spring (13)
        • JPA (5)
        • Kotlin (13)
        • Java (24)
        • Error (7)
      • 기타 (70)
        • Kafka (3)
        • Kubernetes (3)
        • Docker (13)
        • git (19)
        • 잡동사니 (27)
      • 재테크 (11)
        • 세무 (4)
        • 투자 (3)
        • 보험 (0)
      • BlockChain (2)
        • BitCoin (0)
      • C (32)
        • C (10)
        • C++ (17)
        • Error (3)
      • Low Level (8)
        • OS (3)
        • 시스템 보안 (5)
      • 네트워크 (3)
      • LINUX (30)
        • Linux (26)
        • Error (4)
      • 저작권과 스마트폰의 이해 (0)
      • 생각 뭉치 (6)
      • 궁금증 (2)
      • Private (4)
        • 이직 경험 (0)
        • 꿈을 찾아서 (1)
      • Android (21)
        • OS (4)
  • 블로그 메뉴

    • 홈
    • WEB
    • 알고리즘
    • DataBase
    • Linux
    • Mobile
    • C
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    PostgreSQL
    Bitcoin
    database
    Git
    ubuntu
    javascript
    JPA
    kafka
    docker
    알고리즘
    C++
    java
    Kotlin
    linux
    algorithm
    Spring
    백준
    프로그래머스
    Programmers
    android
  • hELLO· Designed By정상우.v4.10.3
M_Falcon
[Java] Thread 상속 대신 Runnable 을 사용하라.
상단으로

티스토리툴바