13-3~6 쓰레드의 구현과 실행
쓰레드의 구현과 실행
- Thread 클래스를 상속 (java는 단일상속. 덜 유연)
// 구현
class MyThread extends Thread {
public void run() { // Thread class의 run()을 오버라이딩
for(int i = 0; i < 5; i++){
System.out.println(this.getName()); // 조상인 Thread의 getName() 호출
}
}
}
// 실행
MyThread t1 = new MyThread(); // 쓰레드의 생성
t1.start(); // 쓰레드의 실행
- Runnable 인터페이스를 구현 (better. 더 유연)
// Runnable 인터페이스
public interface Runnable {
public abstract void run();
}
// 구현
class MyThread2 implements Runnable {
public void run() { // Runnable 인터페이스의 추상메서드 run()을 구현
for(int i = 0; i < 5; i++){
// Thread.currentThread() - 현재 실행중인 Thread를 반환한다.
System.out.println(Thread.currentThread().getName()); // getName() 호출
}
}
}
// 실행
Runnable r = new MyThread2();
Thread t2 = new Thread(r); // Thread(Runnable r). sort(Comparator c) 방법과 유사
// Thread t2 = new Thread(new MyThread2()); // 위 두 문장을 한 문장으로 표현한 방법
t2.start();
쓰레드의 실행 - start()
- 쓰레드를 생성한 후에 start()를 호출해야 쓰레드가 작업을 시작한다.
Thread1 t1 = new Thread1(); // 쓰레드 t1 생성
Thread2 t2 = new Thread2(); // 쓰레드 t2 생성
// 무엇이 먼저 실행될 지는 모른다. OS 스케쥴러가 실행 순서 결정
t1.start(); // 쓰레드 t1 실행
t2.start(); // 쓰레드 t2 실행
start()와 run()
- run()을 작성했는데 왜 start()를 호출할까?
- main에서 start() 호출
- start 메서드가 새로운 호출 스택 생성
- 새로운 호출 스택에 run()을 올리고, start() 종료
- 각각의 thread가 자신만의 호출 스택에서 실행 된다. 서로 독립적인 작업 수행 가능!
Author And Source
이 문제에 관하여(13-3~6 쓰레드의 구현과 실행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@oyeon/13-36-쓰레드의-구현과-실행저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)