쓰레드의 구현과 실행

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개의 댓글

관련 채용 정보