13-3~6 쓰레드의 구현과 실행

8171 단어 JavaJava

쓰레드의 구현과 실행

  1. 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();			// 쓰레드의 실행
  1. 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()를 호출할까?
  1. main에서 start() 호출
  2. start 메서드가 새로운 호출 스택 생성
  3. 새로운 호출 스택에 run()을 올리고, start() 종료
  4. 각각의 thread가 자신만의 호출 스택에서 실행 된다. 서로 독립적인 작업 수행 가능!

좋은 웹페이지 즐겨찾기