Java에서 쓰레드를 사용하는 방법에는 Thread 클래스를 상속하는 방법과 Runnable 인터페이스를 사용하는 방법이 있다.
두 가지 방법은 어떤 차이점이 있을지 궁금하여 포스팅을 남긴다.
Thread 클래스를 상속하면 기본적으로 run() 함수를 오버라이딩(overriding)하여 수행할 일을 작성하게 된다. 사용 예는 다음과 같다.
public class ThreadEx {
public static void main(String[] args) {
Thread t = new MyThread();
t.start();
}
}
class MyThread extends Thread {
@Override
public void run() {
System.out.println( "Thread class start!" );
}
}
}
쓰레드를 사용하고자하는 클래스에 Runnable 인터페이스를 선언하고 Thread 클래스와 마찬가지로 run() 함수를 오버라이딩하여 수행할 작업들을 작성한다. 사용 예는 다음과 같다.
public class RunnableEx {
public static void main(String args[]) {
Runnable r = new MyRunnable();
Thread t = new Thread(r);
t.start();
}
}
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println( "Thread interface start!" );
}
}
사실상 Thread 클래스 내부를 들여다보면 Runnable 인터페이스를 확장하여 사용하고 있기 때문에 결국 뿌리는 같다고 볼 수 있다. 그러나 차이점을 얘기하자면 자바는 다중 상속을 허용하지 않기 때문에 확장성이 더욱 필요해지는 프로그램에서는 인터페이스를 사용하는 것이 효율적이라고 볼 수 있다.