Hello

Java 쓰레드의 구현과 실행

by 볼빵빵오춘기

쓰레드의 구현과 실행

방법1

Thread클래스를 상속

 

방법2

Runable인터페이스를 구현 

 

 

방법2가 더 낫다.
why? 자바는 단일상속이라서 다른 클래스를 상속받지 못하기 때문이다.

 

예제 코드

더보기
import java.util.*;

public class Try {
	public static void main(String[] args) {
		
		ThreadEx1_1 t1 = new ThreadEx1_1();

		Runnable r = new ThreadEx1_2();
		Thread t2 = new Thread(r);	  // 생성자 Thread(Runnable target)

		t1.start();
		t2.start();
		
	}
}

// 방법1. Thread클래스를 상속해서 쓰레드를 구현
class ThreadEx1_1 extends Thread { 
	public void run() { // 쓰레드가 수행할 작업을 작성
		for(int i=0; i < 5; i++) {
			System.out.println(getName()); // 조상인 Thread의 getName()을 호출
		}
	}
}

// 방법2.Runnable인터페이스를 구현해서 쓰레드를 구현
class ThreadEx1_2 implements Runnable { 
	public void run() { // 쓰레드가 수행할 작업을 작성
		for(int i=0; i < 5; i++) {
			// Thread.currentThread() - 현재 실행중인 Thread를 반환한다.
			System.out.println(Thread.currentThread().getName());
		}
	}
}

 

결과1

 

결과2

 

⇒ 쓰레드의 실행순서는 os스케쥴러가 결정하기 때문에 순서가 바뀔 수 있다.

 

쓰레드의 실행 - start()

쓰레드를 생성한 후에 start()를 호출해야 쓰레드가 작업을 시작한다.

⇒ start()를 했다고 바로 실행되는것은 아니다.

⇒ t1이 먼저 실행했기때문에 먼저 실행할 가능성이 높은거지 바로 실행하는것이 아니다.

⇒ 즉, t1이 먼저 실행했기 때문에 실행할 준비가 된거지 먼저 실행되는것은 아니다. t2가 t1보다 먼저 실행할 수 있다는 의미다.

⇒ 실행순서는 OS스케쥴러가 결정한다.

⇒ 자바 버츄얼 머신이 os에 독립적이라고 하지만 이 부분은 os에 종속적이라는 의미이다.

 

start()와 run()

 

🤔 run()을 작성했는데 왜 start()를 실행하지?? 라고 생각이 들 것이다. 

 

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기