쓰레드를 구현하는 방법은 Thread 클래스를 상속받는 방법과 Runnable 인터페이스를 구현하능 방법, 두 가지가 있다. Thread 클래스를 상속받으면 다른 클래스를 상속받을 수 없기 때문에, Runnable 인터페이스를 구현하는 방법이 일반적이다.
쓰레드를 구현한다는 것은, 쓰레드를 통해 작업하고자 하는 내용을 run()
에 작성하는 것이다.
class ThreadEx1 {
public static void main(String args[]) {
ThreadEx1_1 t1 = new ThreadEx1_1();
Runnable r = new ThreadEx1_2();
Thread t2 = new Thread(r);
t1.start();
t2.start();
}
}
class ThreadEx1_1 extends Thread {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(getName());
}
}
}
class ThreadEx1_2 implements Runnable {
public void run() {
System.out.println(Thread.currentThread().getName());
}
}
Thead 객체 내부에서 Runnable 을 가지고 있으며 Thread 를 실행할 때 Runnable 의 run()
을 실행한다.
쓰레드를 생성했다고 해서 자동으로 실행되는 것이 아닌 start()
를 호출해야 한다. start()
를 호출한다고 바로 실행하는 것은 아니고, 실행대기 상태에 있다가 본인의 차례가 되면 실행한다. 쓰레드의 실행순서는 OS 의 스케쥴러가 작성한 스케쥴에 의해 결정된다.
또, 한 번 실행이 종료된 쓰레드는 다시 실행할 수 없다. 즉, 하나의 쓰레드에 대해 start()
가 한 번만 호출될 수 있다. 쓰레드의 작업을 한 번 더 실행하고 싶다면 새로운 Thread 객체를 할당해야 한다.