결론
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
Java Thread 클래스의 라인수는 거진 3,000라인에 육박한다.
Thread 는 '어떤 일'을 할지 뿐만 아니라 쓰레드의 컨텍스트를 어떻게 관리할지, Interrupt 발생시 행위, 시작, 종료, 중단 등의 많은 역할을 갖는다.
Thread 상속 방식은 불필요한 역할을 너무 많이 갖게된다.
이러한 이유로 Thread 상속 보다는 Runnable 구현을 택하는게 좋다.
'JVM > Java' 카테고리의 다른 글
[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 |
[Java] Enum 에는 equals 대신 == 을 써라 (0) | 2023.11.22 |