쓰레드의 구현과 실행

NOAH·2021년 1월 25일
0
post-thumbnail

쓰레드 구현

  1. Thread 클래스를 상속받는 방법
  2. Runnable 인터페이스를 구현하는 방법

둘다 큰 파이는 없지만 Runnable 인터페이스를 구현하는 것이 일반적이에요. 왜냐하면 재사용성(Reusability)과 일관성(Consistency)을 유징할 수 있기 때문에 보다 객체지향적인 방법이에요.

Runnable interface 는 오로진 run()만 정의되어 있는 간단한 인턴페이스로
구현가이 위해서 추상메서드인 run()의 몸통{}부를 만들어 주는 것이에요.

즉, 쓰레드를 구현한다는 것은 두 방법 중 어떤 것을 택하든지 쓰레드를 작업하고자 하는 채용으로 run()의 몸통부{}를 채우는 것일 뿐이에요.


public static void main(String args[]) {
	ThreadEx1_1 t1 = new ThreadEx1_1();
    
    Runnable r = new ThreadEx1_2();
    Thread t2 = new Thread(r);
    
    t1.start();
    t2.start();
}

class Thread1_1 extends Thread { //1. Thread 클래스 상속
public void run();{
	for(int i = 0 ; i < 5 ; i++) {
    
    // 조상 Threaddml getName()호출
    	System.out.print.ln(this.getName());
    	}
	}
]

Class ThredEx1_2 implements Runnable{ // 2.Runnable 인터페이스
	public void run() {
    	for(int i = 0 ; i < 5 ; i ++){
        //Thread.currentThread() - 현재 실행중인 Thread를 반환한다. 
        	System.out.println(Thread.currentThread().getName());
        }
    }
}

run() 과 start()

run의 몸통{}부를 채워 넣었는데 왜 쓰레드를 실행시키는 메서드는 start()일까?
start() 메서드를 실행하면 새로운 stack을 생성시키고 그 위에 run()을 올려주기 때문이다.

쓰레드의 실행

쓰레드를 구현 후에 start()호출해야 쓰레드가 작업을 시작해요.
Thread의 실행순서는 OS의 스케쥴러가 결정하기 때문에
먼저 thread를 start를 했다고 먼저 실행되는 것은 아니고, OS의 스케쥴러에 종속적이다.

0개의 댓글