쓰레드의 구현과 실행
- Thread 클래스를 상속 (java는 단일상속. 덜 유연)
class MyThread extends Thread {
public void run() {
for(int i = 0; i < 5; i++){
System.out.println(this.getName());
}
}
}
MyThread t1 = new MyThread();
t1.start();
- Runnable 인터페이스를 구현 (better. 더 유연)
public interface Runnable {
public abstract void run();
}
class MyThread2 implements Runnable {
public void run() {
for(int i = 0; i < 5; i++){
System.out.println(Thread.currentThread().getName());
}
}
}
Runnable r = new MyThread2();
Thread t2 = new Thread(r);
t2.start();
쓰레드의 실행 - start()
- 쓰레드를 생성한 후에 start()를 호출해야 쓰레드가 작업을 시작한다.
Thread1 t1 = new Thread1();
Thread2 t2 = new Thread2();
t1.start();
t2.start();
start()와 run()
- run()을 작성했는데 왜 start()를 호출할까?
- main에서 start() 호출
- start 메서드가 새로운 호출 스택 생성
- 새로운 호출 스택에 run()을 올리고, start() 종료
- 각각의 thread가 자신만의 호출 스택에서 실행 된다. 서로 독립적인 작업 수행 가능!