네, 가능합니다. Java에서는 Thread 클래스의 start() 메서드를 재정의(오버라이딩)할 수 있습니다. 다만 재정의된 start() 메서드 안에서 반드시 super.start()를 호출해야 새로운 스레드가 생성되고, 그 새로 생성된 스레드에서 run() 메서드가 실행됩니다.
만약 재정의한 start() 메서드 내부에서 super.start()를 호출하지 않고 run() 메서드를 직접 호출한다면, run()은 새로운 스레드가 아닌 현재 실행 중인 스레드에서 일반적인 메서드처럼 동작하게 됩니다. 즉, 멀티스레딩의 이점을 전혀 얻을 수 없게 되므로 주의해야 합니다.
예제 코드
public class ThreadTest {
public static void main(String[] args) {
MyThread t = new MyThread();
t.start();
}
}
class MyThread extends Thread {
@Override
public void start() { // start() 메서드 재정의
System.out.println("Overriding a start() method");
super.start(); // 새로운 스레드 생성 및 run() 실행
}
@Override
public void run() {
System.out.println("run() method ");
}
}실행 결과
Overriding a start() method run() method
핵심 정리
위 예제에서 볼 수 있듯이, 재정의된 start()가 먼저 호출되어 메시지를 출력한 후, super.start()에 의해 새로운 스레드가 생성되고 그 스레드에서 run() 메서드가 실행됩니다. 따라서 start() 메서드를 재정의할 때는 다음 두 가지를 기억하는 것이 중요합니다.
1. super.start() 호출 필수: 실제 스레드 생성과 run() 메서드의 비동기 실행을 담당합니다.
2. run() 직접 호출 금지: run()을 직접 호출하면 새로운 스레드가 아닌 현재 스레드에서 순차적으로 실행되어 멀티스레드 환경이 구성되지 않습니다.