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()를 실행하지?? 라고 생각이 들 것이다.
'👩🏻💻 About 프로그래밍 > Java' 카테고리의 다른 글
Java 쓰레드의 우선순위, 쓰레드 그룹 (0) | 2023.12.09 |
---|---|
Java 싱글쓰레드와 멀티 쓰레드, 쓰레드의 I/O 블락킹 (1) | 2023.12.09 |
Java 프로세스, 쓰레드(process & thread) (1) | 2023.12.09 |
Java 애터네이션 타입 정의하기, 애너테이션 요소 (0) | 2023.12.09 |
Java 메타 애너테이션 (0) | 2023.12.09 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기