쓰레드( Thread ) #1


쓰레드란 프로세스의 작업을 처리하는 '일꾼'같은 개념이다. 프로세스는 프로그램을 수행하기 위해 필요한 데이터와 메모리, 쓰레드로 구성되어 있으며, 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 바로 쓰레드이다.


Java에서 쓰레드를 구현하는 방법은 2가지다.

   1. Thread클래스를 상속받는 방법

   2. Runnable인터페이스를 구현하는 방법

일반적으로 Runnable인터페이스를 구현하는 방법을 많이 사용한다. 아무래도 클래스를 직접적으로 상속받는 것보단, 인터페이스를 구현하는 편이 상대적으로 유연한 관계를 만들 수 있고, Thread클래스를 상속받게되면 다른 클래스를 상속받을 수 없기 때문이다.

class ThreadEx {
    public static void main(String args[]) {
        ThreadEx_1 t1 = new ThreadEx_1();
        
        Runnable r = new ThreadEx_2();
        Thread t2 = new Thread(r); // Thread(Runnable r)
    
        t1.start(); // t1쓰레드 전용 call stack을 생성한 후, run() 실행
        t2.start();
    }
}

class ThreadEx_1 extends Thread {
    public void run() {
        for (int i=0; i<5; i++)
            System.out.println(getName()); // Thread클래스의 인스턴스메서드
    }
}

class ThreadEx_2 implements Runnable {
    public void run() {
        for (int i=0; i<5; i++) {
            // Thread.currentThread()는 현재 실행중인 쓰레드의 참조값을 반환한다.
            System.out.println(Thread.currentThread().getName());
        }
    }
}