앞에서 밝혔듯이 필자는 별로 좋아하지는 않지만 Thread를 사용해야할 때 Runnable객체
를 만들지않고,Thread 클래스를 이용해서도 같은 효과를 얻을 수 있습니다.
Thread 클래스가 Runnable인터페이스를 구현했기 때문에 Thread를 상속하게 되면 상속한 클래스의 객체는 당연히 Thread이기도하고 Runnable이기도 하겠지요.
Thread가 Thread로서의 삶을 시작될 때 수행하는 일은 (즉, 우리가 의미를 두고 설계해야하는 것) Runnable 객체의 public void run() 이므로 Thread를 상속한후에 public void
run()을 반드시 적절하게 고쳐야 할 것입니다.
상속받은 클래스에서 기본 클래스에서 정의해놓은 메소드를 다시 정의하는 것을 메소드
오버라이딩(Method Overriding) 이라고 합니다.
만약 이를 적절하게 고치지 않는다면 Thread가 시작되어도 원하는 행동을 하지 않습니다.
public class AsiaThread extends Thread {
public void run() {
for(int i = 0; i < 10; i++)
System.out.println("Tiger " + i );
}
}
예제 7-10 AsiaThread.java
예제 7-10에서 AsiaThread클래스는 Thread 클래스를 상속(extends)했습니다.
그리고 AsiaThread는 Thread 클래스에서 구현되어 있는 public void run()을 새롭게 정의
하고 있습니다. 즉, Thread클래스에서 정의되어 있는 public void run()을 사용하지 않고
AsiaThread에서 새롭게 정의한 public void run()을 사용하겠다는 뜻입니다.
이렇게 Runnable객체를 이용하지 않고 Thread를 상속해서 사용하려고 한다면 반드시
메소드 오버라이딩을 해야합니다.
예제 7-11은 AfricaThread를 구현한 내용입니다.
AsiaThread와 마찬가지로 Thread를 상속했으며, public void run()메소드를 오버라이딩
했습니다.
public class AfricaThread extends Thread {
public void run() {
for(int i = 0; i < 10; i++)
System.out.println("Zebra " + i );
}
}
예제 7 - 11 AfricaThread.java
예제 7 - 12는 Runnable객체를 사용하지 않고 Thread를 상속해서 같은 효과를 얻어내고
있습니다.
public class ExtendsThread {
public static void main(String[] args ) {
Thread
africa.start();
AsiaThread
asia.start();
System.out.println("main thread done");
}
}
예제 7 - 12 ExtendsThread.java
예제 7 - 12의 경우는 Runnable객체와 Thread객체를 각각 이용한 것이 아니라
Thread를 상속하고 public void run()메소드를 오버라이딩한 Thread이면서 Runnable인
AsiaThread, AfricaThread를 사용하고 있습니다.
예제 7 -12에서도 폴리모피즘을 사용하고 있는데 바로 이 부분입니다.
Thread
AfricaThread가 Thread이기 때문이지요.
예제 7 - 12에는 구체적인 Runnable객체를 생성하는 부분이 보이지 않는데,
이처럼 Thread클래스를 상속한후 public void run()을 오버라이딩 한 경우에는
별도의 Runnable객체가 필요하지 않고 AfricaThread에서 볼수있듯이 Thread객체를 만들고,
Thread 객체를 시작시키면 됩니다. 왜냐하면 그 객체가 Thread이기도 하고 Runnable객체
이기도 하기 때문입니다.
그림 7 - 2
'자바 Threads Programming > Basic' 카테고리의 다른 글
Thread-6.Thread 우선순위 (0) | 2008.01.07 |
---|---|
Thread-5.Thread 라이프사이클(Life Cycle) (0) | 2008.01.07 |
Thread-4.간단한 Thread 검색 프로그램 (0) | 2007.12.28 |
Thread-2.Thread의 사용방법 (0) | 2007.12.18 |
Thread-1.Thread (0) | 2007.12.18 |